Perl 分叉进程拒绝退出
我在Cygwin运行以下程序:Perl 分叉进程拒绝退出,perl,unix,cygwin,fork,Perl,Unix,Cygwin,Fork,我在Cygwin运行以下程序: my $pid = fork(); if (!$pid) { system($command); # do other stuff exit; } else { sleep $timeout; print "Process timed out\n" system ("TASKILL /F /T /PID $pid"); } 如果该过程超时,它将按预期终止,以便该部件正常工作。然而,当进程及时
my $pid = fork();
if (!$pid) {
system($command);
# do other stuff
exit;
}
else {
sleep $timeout;
print "Process timed out\n"
system ("TASKILL /F /T /PID $pid");
}
如果该过程超时,它将按预期终止,以便该部件正常工作。然而,当进程及时完成并且“其他工作”完成时,perl.exe
就会无限期地挂起。为什么不退出
如果我使用exec()
而不是system()
,则“其他内容”没有完成,并且仍然不会退出
谢谢当我取出“其他东西”时,它仍然不会退出。Cygwin pid与Windows pid不是一回事!使用
Cygwin::pid\u to_winpid($Cygwin\u pid)
获取适合传递给TASKKILL
的值。对于Cygwin pid,您应该只使用内置的kill
。嗯,fork
如何在Cygwin Perl中工作。那里的线程也在模拟它吗?失败的fork
返回未定义的值,但您的代码没有检查该条件。这可能不是问题的根源,但检查系统调用的返回状态是一个很好的习惯。@ikegami:不,不是线程模拟的。但也没有真正的叉子便宜。