16.21 動作のタイムアウト

動作が一定の長さの時間を超えて実行され続けることのないようにしたい。

  • SIGALARMハンドラを設定して、dieを呼び出す。
eval {
  local $SIG{ALARM} = sub { die "alarm clock restart" };
  alarm 10;   # アラームを10秒に設定する
  eval {
    # 実行するのに時間のかかる動作をここに書く
  };
  alarm 0;   # アラームを取り消す
};
alarm 0;   # 競合状態の保護
die if $@ && $@ !~ /alarm clock restart/; # エラーを再び生成する