#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
void read_childproc(int sig)
{
int status;
pid_t id=waitpid(-1,&status,WNOHANG); //调用waitpid()函数销毁子进程
if(WIFEXITED(status))
{
printf("Removed proc id: %d \n",id);
printf("Child send: %d \n",WEXITSTATUS(status));
}
}
int main()
{
pid_t pid;
struct sigaction act;
act.sa_handler=read_childproc;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGCHLD,&act,0); //注册信号,当子进程终止时产生SIGCHILD信号
pid=fork();
if(pid==0) //子进程1
{
puts("Hi! I'm child one process");
sleep(10);
return 12;
}
else
{
printf("Child proc id: %d \n",pid);
pid=fork(); //子进程2
if(pid==0)
{
puts("Hi!I'm child two process");
sleep(10);
exit(24);
}
else
{
int i;
printf("Child proc id: %d \n",pid);
for(i=0;i<5;++i)
{
puts("wait...");
sleep(5);
}
}
}
return 0;
}