2011-05-17 49 views
0

我發現a comment提示我看到一個問題,其中IPC::Open3的孩子正在運行主程序代碼,而不是像我期望的那樣運行execopen3過程泄漏?

是否有其他人對IPC :: Open3的「泄漏」流程有經驗?我查看了圖書館的資料,沒有發現任何蠻橫的錯誤。

這是用Perl 5.8.4(是的,我知道...但它不能被更新)10

+0

也許還可以利用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

回答

2

儘管這已被固定的,open3從5.8.4運行在Solaris上可能向孩子拋出異常,這意味着父母和孩子都可以從open3「返回」。

雖然你可以處理它,但它有點複雜。*用更新的Perl替換IPC/Open3.pmone會更容易。更好的是,如果你不需要像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); 
    } 
}