概要
コマンドに制限時間を設定します。自動化や監視で「いつまで待つか」を明示したい時に有効です。
基本構文
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分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
timeout 2 sleep 10を実行し、終了コード124を確認します。
実行結果サンプル
-
timeout 2 sleep 10 echo $?124 -
timeout 5 sleep 1 echo $?
戻り値コード
- 0 正常終了。処理に成功しました。
- >0 対象不存在、権限不足、不正な引数などで処理できませんでした。
使用例
timeout 5 sleep 10timeout -k 5 20 commandtimeout -s INT 10 command
よくあるエラー
-
毎回すぐ失敗する 原因: 制限時間が短過ぎます。対処: 通常時の処理時間を測り、余裕を持った値へ調整します。
-
TERMでは止まらない 原因: 対象がTERMを無視しているか、後処理に時間がかかっています。対処: -kで二段構えにし、最後にKILLを送る猶予を設定します。
導入・互換性情報
GNU coreutils由来のコマンドで、すべてのUNIX系に必ずあるわけではありません。移植性が必要な手順では存在確認が必要です。
注意点 / セキュリティリスク
危険度は中程度です。制限時間を短くし過ぎると正常な処理まで失敗扱いになり、長過ぎると意味が薄れます。
FAQ
-
Q. sleepと何が違いますか。 A. sleepはただ待つだけですが、timeoutは待ち時間を超えた対象を止めるための道具です。
-
Q. 終了コード124は何を意味しますか。 A. timeoutが制限時間超過を検出し、対象を終了させたことを示します。
参照リンク
- カテゴリー: Process And Jobs
- レベル: Practical