2016-04-14 48 views
4

我正在使用IO::Select有關IO的說明::選擇

我沒有想到這個代碼只有當我手動殺死分叉進程時纔會終止。這是正確的行爲?

use strict; 
use warnings; 

STDOUT->autoflush(); 

use IO::Select; 

open(my $ph, "-|", "perl -e 'sleep 1 while 1'"); 

my $sel = IO::Select->new(); 

$sel->add($ph); 

$sel->can_read(2) or warn "timeout\n"; 

print "woohoo?\n"; 

回答

7

open

關閉任何管道文件句柄導致父進程等待子結束,然後返回$?${^CHILD_ERROR_NATIVE}狀態值。

因此關閉該文件句柄在$ph等待孩子完成時($ph超出範圍,其完成)。

(這有什麼用IO做::選擇或select

+0

是'IO :: Select'與適合'長期生活的PID STDOUT'監視超時? –

+0

@Сухой27,我不確定您的意思是「STDOUT監控」。 – ikegami

+0

我的意思是監視分叉進程的輸出,即。等待輸出幾秒鐘,然後做其他事情,然後再等待,等等。 –