catching a signal from child process

i am creating children processes using fork system call
every child i create goes to sleep for random time.
when child stops running how can i catch his signal and turminate the child

#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>

void childexit(int signal_num) {
int retval, nval;
char buf[256];
                 bzero(buf,256);
                 nval =   waitpid(0,&retval,WNOHANG);  
                 sprintf(buf,"Waited on child %d which exited with code = %d\n",nval,retval);       
                  write(STDOUT_FILENO,buf,256);
}

int main(void) {

                    signal(SIGCHLD,childexit);
                    /*rest of code*/
}

ok i think i got it
thanks