我已经找到了上一个问题的解决方案,但还有另一个问题。
但是为此,我还没有找到任何解决方法。
编码:
[...]
use HTTP::Daemon
use Parallel::ForkManager;
PM with , for example 3 processes MAX
[...]
while (1)
{
$inputcon = $daemon->accept();
$pm->start and next; #fork
do_client_stuff($inputcon);
$pm->finish();
}
当我在这个脚本上执行 wgets 时,一切正常,我在进程列表中看到了子进程,但最后一个(总是最后一个)有问题
最后一个子进程始终保持僵尸状态。当我再做一个 wget 时,这个僵尸进程正常退出,另一个(来自这个当前 wget 查询的这个)变成一个僵尸
5989 pts/5 S+ 0:00 \_ grep test.pl
5975 pts/4 S+ 0:00 \_ /usr/bin/perl ./test.pl
5987 pts/4 Z+ 0:00 \_ [test.pl] <defunct>
你知道,最后一个子进程总是僵尸。不知道为什么所有进程都工作正常,但最后一个不是。
任何提示,解决方案?
谢谢你。
// 对不起我的英语不好
这是示例代码。127:8080 上的一个 wget 使子进程成为僵尸。但是脚本正在运行,新查询/新僵尸 PID。
#!/usr/bin/perl
use HTTP::Daemon;
use Parallel::ForkManager;
$daemon = new HTTP::Daemon(LocalPort => 8080, LocalAddr => "127.0.0.1", Listen => 64, ReuseAddr => 1) or die "$!";
$pm = Parallel::ForkManager->new(3);
while (1)
{
$inputcon = $daemon->accept();
$pm->start and next;
do_client_stuff($inputcon);
$pm->finish();
}
sub do_client_stuff
{
my ($inputcon) = @_;
$request = $inputcon->get_request;
print $request . "\n";
$inputcon->send_error(403);
}