timeoutコマンドは、コマンドを実行させる際に制限時間をつけることができます。
また、終了する際に送信されるシグナルを変更できます。
わざと無限ループの処理のプログラムを作成し、timeoutコマンドで制限時間を設けて、処理するような使い方もできます。
目次
timeoutコマンドの構文
timeoutコマンドの構文
1 |
timeout [option] duration command [arg]... |
duration:終了する時間(デフォルト:sec)
timeoutコマンドの利用例
指定した時間でスクリプトを終了
timeoutコマンドは時間を指定することで、コマンドの処理時間に制限をつけることが出来ます。
指定するのに使用できる単位は、
s:秒(デフォルト)
m:分
h:時
d:日
になります。
コマンド例では無限ループになっているスクリプトを終了させています。
コマンド例
1 |
timeout 3 ./test.sh |
test.sh
1 2 3 4 5 6 |
#/bin/bash while :; do echo test sleep 1 done |
実行結果
1 2 3 |
test test test |
指定した時間の後の一定時間後KILLシグナルを送信
(-kオプション)
timeoutコマンドで送られるのはTERMシグナルになります。TERMシグナルがコマンドに送られた後にプログラムが終了していない場合、さらに-kオプションで指定した時間後に今度はKILLシグナルを送り、プログラムを強制終了させます。
コマンド例
1 |
timeout -k 2 3 ./test2.sh |
test2.sh
1 2 3 4 5 6 7 8 |
#/bin/bash trap 'echo TERM signal' TERM while :; do echo test sleep 1 done |
実行結果
1 2 3 4 5 6 7 8 |
test test test Terminated TERM signal test test 強制終了 |
送信するシグナルを変更
(-sオプション)
-sオプションを用いるとtimeoutコマンドで送信されるシグナルをTERMシグナルから別のシグナルに変更することが出来ます。
コマンド例
1 |
timeout -s USR1 -k 2 3 ./test3.sh |
test3.sh
1 2 3 4 5 6 7 8 |
#/bin/bash trap 'echo USER1 signal' USR1 while :; do echo test sleep 1 done |
実行結果
1 2 3 4 5 6 7 8 |
test test test User defined signal 1 USER1 signal test test 強制終了 |