Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 分叉进程拒绝退出_Perl_Unix_Cygwin_Fork - Fatal编程技术网

Perl 分叉进程拒绝退出

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"); } 如果该过程超时,它将按预期终止,以便该部件正常工作。然而,当进程及时

我在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");
}
如果该过程超时,它将按预期终止,以便该部件正常工作。然而,当进程及时完成并且“其他工作”完成时,
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:不,不是线程模拟的。但也没有真正的叉子便宜。