パイプで OPEN を使用して実行しているコマンドがあり、タイムアウトを 10 秒に設定し、実行時間がこれを超えるとサブプロセスを中止したいと考えています。しかし、コードが原因でプログラムがハングするだけです。ALARM が正しく配信されないのはなぜですか?
my $pid = 0;
my $cmd = "someCommand";
print "Running Command # $num";
eval {
local $SIG{ALRM} = sub {
print "alarm \n";
kill 9, $pid;
};
alarm 10;
pid = open(my $fh, "$cmd|");
alarm 0;
};
if($@) {
die unless $@ eq "alarm \n";
} else {
print $_ while(<$fh>);
}
編集:
だから以下の答えから、これは私が持っているものです:
my $pid = open(my $fh, qq(perl -e 'alarm 10; exec \@ARGV; die "exec: $!\n" ' $cmd |));
print $_ while(<$fh>);
しかし、これはアラームがタイムアウトしたときにコンソールに ALARM CLOCK を出力します...コードのどこにもこれを指定していません...どうすればこれを取り除くことができますか?また、カスタムアラームイベントハンドラーをどこに配置しますか?
ありがとう!