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