引言:
在服务器中,进程往往在请求到来时,生成子进程去处理请求。
如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。
如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。
一个子进程在终止或停止时,会向其父进程发送SIGCHLD信号。
对于SIGCHLD信号,如果我们定义为:
1.
SIG_DFL:默认的处理方式是不理会这个信号,但是也不会丢弃子进程状态,所以如果不用wait,waitpid对其子进行进行状态信息回收,会产生僵尸进程。
2.SIG_IGN:忽略,此时我们的子进程终止的时候,将由init进程进程回收,所以不会产生僵尸进程。(不需要要在父进程中调用wait())
如果调用sigaction()函数,且sa_flag中设置了SA_NOCLDWAIT标志,则子进程终止时候,不产生僵尸进程,同时不向父进程发送SIGCHLD信号。
版权声明:本文为weixin_43796767原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。