open3进程泄漏?

时间:2011-05-17 22:11:50

标签: perl

我发现a comment暗示了我认为我正在看到的一个问题,IPC::Open3fork ed孩子正在运行主程序代码,而不仅仅是{{1}像我期望的那样。

有没有其他人有过从IPC :: Open3中“泄漏”流程的经验?我查看了图书馆的来源,并没有看到任何令人发指的错误。

这是在Solaris 10上运行的Perl 5.8.4(是的,我知道......但无法更新)。

1 个答案:

答案 0 :(得分:2)

虽然这已得到修复,但5.8.4中的open3可能会引发孩子的异常,这意味着父母和孩子都可以从open3“返回”。

虽然你可以处理它,但它有点复杂。*用更新的Perl替换IPC/Open3.pm my $parent_pid = $$; my $pid = eval { open3(...) }; if (!$pid) { if ($parent_pid == $$) { # Exception in parent. die($@); } else { # Exception in child (pre-exec). print STDERR $@; _exit(255); } } 会更容易。

更好的是,如果你不需要像IPC :: Open3那样低级的东西,你可以使用更高级别的模块,例如one(更简单)或IPC::Run3(更强大)。

* - 至少,

{{1}}