timeout タイムアウト

英語表記timeout

日本語表記実行時間制限

正式名称timeout

危険度注意

What does it mean?

コマンドに制限時間を設定します。自動化や監視で「いつまで待つか」を明示したい時に有効です。

Command Quest

timeout を今日の道具にする

コマンドに制限時間を設定します。自動化や監視で「いつまで待つ...

$ timeout [オプション]... 期間 コマンド [引数...]
関連用語0
次のコマンド0
FAQ2
参照2

概要

コマンドに制限時間を設定します。自動化や監視で「いつまで待つか」を明示したい時に有効です。

基本構文

timeout [オプション]... 期間 コマンド [引数...]

詳細解説

timeoutは、指定した時間だけコマンドの終了を待ち、制限時間を超えた場合にシグナルを送るコマンドです。固定待機とは異なり、「一定時間で諦める」制御を簡潔に書けます。

既定ではTERMシグナルを送りますが、必要に応じて別のシグナルへ変えたり、一定時間後にKILLを送る二段構えにしたりできます。

実務では、応答が返らない外部コマンド、ネットワーク確認、保守手順の自動化で、待ち過ぎを防ぐ安全装置として有効です。

このコマンドを使う場面

外部コマンドの待ち過ぎを防ぎたい時、自動化で上限時間を決めたい時、ハングに備えたい時に使います。

まず安全に試す方法

1. timeout 2 sleep 10
2. echo $?
3. timeout -k 1 2 sh -c "trap "" TERM; sleep 10"
4. echo $?

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. timeout 2 sleep 10を実行し、終了コード124を確認します。

オプション

  • -s シグナル
    制限時間超過時に送るシグナルを変えます。
    timeout -s INT 10 command
  • -k 期間
    最初のシグナル後も止まらない場合、追加でKILLを送るまでの猶予を指定します。
    timeout -k 5 20 command
  • --preserve-status
    コマンドの終了状態をなるべく保持します。
    timeout --preserve-status 5 command

実行結果サンプル

  • timeout 2 sleep 10 echo $?
    124
  • timeout 5 sleep 1 echo $?

戻り値コード

  • 0 正常終了。処理に成功しました。
  • >0 対象不存在、権限不足、不正な引数などで処理できませんでした。

使用例

  • timeout 5 sleep 10
  • timeout -k 5 20 command
  • timeout -s INT 10 command

よくあるエラー

  • 毎回すぐ失敗する
    原因: 制限時間が短過ぎます。
    対処: 通常時の処理時間を測り、余裕を持った値へ調整します。
  • TERMでは止まらない
    原因: 対象がTERMを無視しているか、後処理に時間がかかっています。
    対処: -kで二段構えにし、最後にKILLを送る猶予を設定します。

導入・互換性情報

GNU coreutils由来のコマンドで、すべてのUNIX系に必ずあるわけではありません。移植性が必要な手順では存在確認が必要です。

注意点 / セキュリティリスク

危険度は中程度です。制限時間を短くし過ぎると正常な処理まで失敗扱いになり、長過ぎると意味が薄れます。

FAQ

  • Q. sleepと何が違いますか。
    A. sleepはただ待つだけですが、timeoutは待ち時間を超えた対象を止めるための道具です。
  • Q. 終了コード124は何を意味しますか。
    A. timeoutが制限時間超過を検出し、対象を終了させたことを示します。

参照リンク

関連記事