in reply to why can't I catch CHLD signal?
I figured it out: the parent is exiting before the child. I need to call wait() or waitpid() in the parent.
--Thanks Grandfather. Points awarded.