スレッド内でタイムアウトを処理しようとしています。私のスクリプトには 4 つのスレッドがあり、各スレッドはコマンドを実行する必要があり、時間がかかりすぎる場合はコマンド プロセスを強制終了します。
私がやっていることは次のとおりです。
my $pid;
if (!($pid = fork))
{
my $pid2;
if (!($pid2 = fork))
{
exec_cmd $command;
}
local $SIG{ALRM} = sub {kill 9, $pid2;};
alarm $timeout;
waitpid $pid2, 0;
exit(0);
}
waitpid $pid, 0;
$ret = $?;
これはスレッド内で実行されるため、子が終了しても、他のスレッドは結合されていません。