如果父进程需要时不时fork一些子进程执行某些操作,但不想等待子进程完成,而是父进程自己继续执行自己的任务
但是不wait,这些子进程结束后就编成僵尸进程,有什么好的解决方法吗
网络上说可以连续fork2次,来规避
我看了下,该方法有缺陷,需要孙子进程sleep一段时间,保证父进程先执行
有没有不需要sleep的方法?
-----------------
补:又看见一个方法,是否可行
要想不产生僵尸进程还有另外一种办法:父进程调用signal或sigaction函数将SIGCHLD信号的处理动作设置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程.系统默认的忽略动作和用户用signal或sigaction函数自定义的忽略通常是没有区别的,但这是一个特列.此方法对于Linux可用,但不保证在其他UNIX系统上都可用
例子:调用signal函数将SIGCHLD信号的处理动作自定义为忽略
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
signal(SIGCHLD, SIG_IGN);//将SIGCHLD信号的处理动作自定义为忽略
if (fork() == 0)
{
//child
printf("child is running, child pid: %d\n", getpid());
sleep(3);
exit(1);
}
//father
while (1);
return 0;
--
修改:b0207191 FROM 59.61.185.*
FROM 59.61.185.*