SIGCHLD是子进程退出后发送给父进程的信号。下面的程序可以显式的看出子进程退出后发送给父进程的信号是SIGCHLD。

可以用SIGCHLD的自定义动作来wait子进程资源。这样每次子进程退出后,父进程收到SIGCHLD信号就会wait子进程

    1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 #include<signal.h>
  5 void clear_child(int sig)
  6 {
  7     printf("the %d sig is coming\n",sig);
  8     int status = 0;
  9     while(waitpid(-1,&status,WNOHANG)>0)
 10     {
 11         printf("sig:%d,code:%d\n",status&0xff,(status>>8)&0xff);
 12 
 13     }
 14 
 15 }
 16 int main()
 17 {
 18     pid_t pid = fork();
 19     if(pid<0){
 20         perror("fork");
 21         exit(1);
 22     }else if(pid == 0)
 23     {//child
 24         sleep(10);
 25         printf("the child exit\n");
 26         exit(1);
 27     }
 28     else
 29     {//father
 30         while(1)
 31         {
 32             signal(SIGCHLD,clear_child);
 33         }
 34     }
 35     return 0;
 36 }
 
 [fbl@localhost sigchild]$ ./sigchild 
the child exit
the 17 sig is coming
sig:0,code:1
^C