1.交给内核释放
signal(SIGCHLD,SIG_IGN);
2.父进程处理
wait(NULL);
waitpid(...);
3.如果父进程忙
通过父进程,注册信号处理函数,来处理SIGCHLD信号,来调用2方法的函数。
4.两次fork
通过父进程调用fork生成子进程,然后通过子进程调用fork生成孙子进程后子进程退出,在孙子进程进行处理实际业务。
5.sigaction函数 + SA_NOCLDWAIT标记
struct sigaction act;
pid_t pid;
act.sa_handler =SIG_DFL;
act.sa_flag=SA_NOCLDWAIT;
act.sa_sigaction=NULL;
sigaction(SIGCHLD,&act,NULL);
网友评论