In addition to moritz's comment about waitpid:
SIGCHLD is handled differently to other signals on most UNIX's, in that it does not by default kill the process it signals. On Linux, check man 7 signal for more information. It is possible that Solaris handles them differently, so it would be wise to look at the equivalent man pages there as well.