繁体   English   中英

摆脱Perl中的僵尸

[英]Getting rid of zombies in perl

我在perl中编写了一个服务器,等待tcp连接。 每次服务器收到一个消息,它都会派一个新的孩子来负责它,并继续侦听另一个连接。(因此,它无法等待SIGCHILD。)该孩子执行了应做的事情并退出,但继续执行“活着”的僵尸。 请问如何解决?

设置$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。

这里还有更多有关堆栈溢出的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM