为了避免僵尸进程,我们使用信号的方式通知父进程回收子进程
1、利用signal系统调用的方式:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <wait.h>
void sig_handler(int signo)
{
if(signo == SIGCHLD)
{
printf("get sigchild\n");
wait(0);
}
}
int main()
{
if(signal(SIGCHLD, sig_handler) < 0)
{
perror("signal error");
exit(0);
}
pid_t pid = fork();
if(pid == -1)
{
perror("fork() error");
exit(0);
}
else if(pid == 0)
{
printf("child process begin\n");
sleep(2);
printf("child process end\n");
}
else
{
while(1)
{
sleep(1);
}
}
return 0;
}
2、利用sigaction实现:
#include <unistd.h>
#include <