1.每次执行fork()前利用waitpid查看是否有子进程需要处理
2.调用signal(SIGCHLD,fun)注册信号处理函数,在函数里调用waitpid()
void fun(int)
{
waitpid();
}
3.利用 sigaction 结构体
struct sigaction act,oldset;//设置信号性质的结构体
sigemptyset(&act.sa_mask);//清空屏蔽位
act.sa_handler = NULL;//函数处理函数为空
act.sa_flags = SA_NOCLDWAIT | SA_NOCLDSTOP;//不接收子进程的信号,并且不让子进程为僵尸进程
sigaction(SIGCHLD,&act,&oldset);//设置SIGCHLD信号。
防止僵尸进程的方法:
最新推荐文章于 2023-03-07 23:54:30 发布