シグナルハンドラを使用していますか? そうでない場合SIGINT
、その同類はあなたのプログラムを終了させます。
my $parent_pid = $$;
# schedule interruption
if (fork() == 0) {
sleep 5;
kill 'INT', $parent_pid;
exit;
}
# trivial signal handler so SIGINT doesn't terminate the program
$SIG{INT} = sub { };
my $n = sleep 1_000_000;
print "Slept for $n seconds.\n";
Linux、perl 5.6.2 では、次の出力が得られます。
Slept for 5 seconds
さらに言えば、アラームが Perl 5.6 でサポートされていないとあなたが言う理由がわかりません (Windows を使用している場合を除きますか?) 繰り返しますが、シグナル ハンドラーを設定しないと、プログラムが終了します。
$SIG{ALRM} = sub {};
alarm 5;
$n = sleep 1_000_000;
print "slept for $n seconds\n";
Perl 5.6.2 で問題なく動作します。