Perlシステムコールのタイムアウト制限を指定するにはどうすればよいですか? から
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
タイムアウトが発生した場合、sub { die "alarm\n" };
プロセスを終了させる必要があります。私は理解できないと思いますdie
。このhttp://www.cs.cf.ac.uk/Dave/PERL/node111.htmlは、「die() 関数を使用してスクリプトを終了し、ユーザーが読むメッセージを表示する」と述べています。ただし、上記のスクリプトの場合、スクリプトは #timed out でコードを処理します。また、sysread は引き続き機能します。sysread の代わりに、30 秒間スリープする perl スクリプトを用意しました。私のタイムアウトは10秒に設定されていました。予想どおり、#timed out のコードは実行されますが、スクリプトは引き続きスリープ状態になります。