在perl中摆脱僵尸

1 perl fork zombie-process

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

gre*_*eke 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";
    }
};
Run Code Online (Sandbox Code Playgroud)

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

Stack Overflow上还有更多信息

  • 如果您认为自己的问题得到了回答,请随时将答案标记为已接受 (2认同)