我正在使用IO::Select
。
我没想到只有当我手动终止分叉进程时才会终止此代码。这是正确的行为吗?
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";
答案 0 :(得分:7)
来自open
,
关闭所有管道文件句柄会导致父进程等待子进程完成,然后返回
$?
和${^CHILD_ERROR_NATIVE}
中的状态值。
因此关闭$ph
中的文件句柄(在$ph
超出范围时完成)等待孩子完成。
(这与IO :: Select或select
无关。)