现在的位置: 首页 > 综合 > 正文

Linux中的僵尸进程

2019年03月21日 ⁄ 综合 ⁄ 共 472字 ⁄ 字号 评论关闭

首先,设置SIGCHLD的handler为SIG_IGN能否避免僵尸进程呢?

man signal,有以下解释:

       According  to  POSIX  (3.3.1.3)  it  is  unspecified  what happens when
       SIGCHLD is set to SIG_IGN.  Here the BSD and  SYSV  behaviours  differ,
       causing  BSD  software  that  sets the action for SIGCHLD to SIG_IGN to
       fail on Linux.

 

避免僵尸进程通常有以下3种方法:

1. fork两次,使得孙子进程的父亲为init,孙子进程去执行job

(init进程只要检测有子进程终止就会调用wait或waitpid释放资源,防止僵尸进程。)

2. 制定自己的SIGCHLD信号处理函数,在这个信号处理函数中调用wait()
3. 通过sigaction系统调用指定信号SIGCHLD处理动作中的sa_flags为SA_NOCLDWAIT

抱歉!评论已关闭.