0
我發現a comment提示我看到一個問題,其中IPC::Open3的孩子正在運行主程序代碼,而不是像我期望的那樣運行exec
。open3過程泄漏?
是否有其他人對IPC :: Open3的「泄漏」流程有經驗?我查看了圖書館的資料,沒有發現任何蠻橫的錯誤。
這是用Perl 5.8.4(是的,我知道...但它不能被更新)10
我發現a comment提示我看到一個問題,其中IPC::Open3的孩子正在運行主程序代碼,而不是像我期望的那樣運行exec
。open3過程泄漏?
是否有其他人對IPC :: Open3的「泄漏」流程有經驗?我查看了圖書館的資料,沒有發現任何蠻橫的錯誤。
這是用Perl 5.8.4(是的,我知道...但它不能被更新)10
儘管這已被固定的,open3
從5.8.4運行在Solaris上可能向孩子拋出異常,這意味着父母和孩子都可以從open3
「返回」。
雖然你可以處理它,但它有點複雜。*用更新的Perl替換IPC/Open3.pm
與one會更容易。更好的是,如果你不需要像IPC :: Open3這樣的低級別的東西,你可以使用更高級別的模塊,比如IPC::Run3(更簡單)或IPC::Run(功能更強大)。
* —在最低限度,
my $parent_pid = $$;
my $pid = eval { open3(...) };
if (!$pid) {
if ($parent_pid == $$) {
# Exception in parent.
die([email protected]);
} else {
# Exception in child (pre-exec).
print STDERR [email protected];
_exit(255);
}
}
也許還可以利用IPC ::運行呢?在[IPC :: Open3]的Perl 5.14.0頁面中建議使用(http://search.cpan.org/~jesse/perl-5.14.0/ext/IPC-Open3/lib/IPC/Open3.pm )。當然,你被困在5.8.4上,但也許IPC :: Run在那裏工作OK。 – 2011-05-17 22:21:12