在perl中摆脱僵尸

时间:2014-01-03 12:58:31

标签: perl fork zombie-process

我在perl中编写了一个服务器,等待tcp连接。 每次服务器收到一个,它都会分配一个负责它的新孩子并继续监听另一个连接。(所以它不能等待SIGCHILD。) 孩子做了它应该做的事情并退出,但继续作为一个僵尸“活着”。 请问有什么解决方案?

1 个答案:

答案 0 :(得分:5)

设置$SIG{CHLD} = 'IGNORE';让系统自动为您处理。

或者将$SIG{CHLD}设置为子例程waitpid

use POSIX qw( WNOHANG );

$SIG{CHLD} = sub {
    while( ( my $child = waitpid( -1, WNOHANG ) ) > 0 ) {
        print "SIGNAL CHLD $child\n";
    }
};

如果您真的想了解它是如何工作的(当然可以!:),您应该阅读perlipc

还有更多信息here on Stack Overflow