版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen739481102/article/details/73196992
进程异步等待,不需要父进程阻塞等待,当子进程退出时会给父进程发送信号,父进程捕捉到信号,然后去执行信号处理函数,信号处理函数中调用waitpid等待子进程,完成回收,否则子进程会变成僵尸进程。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void handler(int sig)
{
waitpid(-1,NULL,1);
printf("get sig:%d\n",sig);
}
int main()
{
printf("begin:\n");
signal(SIGCHLD,&handler);
if(fork()>0)
{
while(1)
{
printf("i am father\n");
sleep(1);
}
}
else
{
printf("i am child\n");
sleep(1);
}
}
else
{
printf("i am child\n");
sleep(3);
exit(1);
}
printf("end\n");
return 0;
}