検索
連載

【 timeout 】コマンド――制限時間を付けて指定のコマンドを実行するLinux基本コマンドTips(316)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、制限時間を付けて指定のコマンドを実行する「timeout」コマンドです。

Share
Tweet
LINE
Hatena
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、制限時間を付けて指定のコマンドを実行する「timeout」コマンドです。

timeoutコマンドとは?

 「timeout」は制限時間を付けて指定のコマンドを実行するコマンドです。「timeout 秒数 コマンド」のように、タイムアウトまでの時間を指定して、コマンドを実行します。



timeoutコマンドの書式

timeout [オプション] 時間 コマンド名

※時間のデフォルトは秒。指定できる単位はs(秒)、m(分)、h(時)、d(日)





timeoutの主なオプション

短いオプション 長いオプション 意味
-s シグナル --signal=シグナル タイムアウト時にコマンドに送るシグナルを指定する(デフォルトはTERMシグナル、本文を参照、※1)
-k 追加の時間 --kill-after=追加の時間 最初のタイムアウトでシグナルを送った後、指定した時間を経過してもコマンドが動作している場合はKILLシグナルを送る(本文を参照
--preserve-status タイムアウトを起こした場合も、実行したコマンドと同じステータスコードで終了する(タイムアウト時のデフォルトの終了ステータスは124)
--foreground timeoutをシェルプロンプトから直接実行しない場合、コマンドが端末からシグナルを受信できるようにする

※1 シグナルは番号か「HUP」などの文字で指定。使用できるシグナルは「kill -l」(連載第8回)を参照。





制限時間を付けて指定のコマンドを実行する

 「timeout 時間 コマンド」で、制限時間(タイムアウトまでの時間)を付けてコマンドを実行できます。デフォルトの単位は「秒数」です。小数点も使用できます。単位を指定する場合、「s」(秒)の他、「m」(分)、「h」(時)、「d」(日)を選択できます。

 実行するコマンドを指定する際、そのコマンドのオプションなどを付けることができます。例えば、画面1では、「timeout 10 ping localhost」として、「ping localhost」(第143回)を10秒間だけ実行しています。

 「ping」コマンドはサーバやIPアドレスを指定して応答の有無を調べます。今回は対象を“localhost”、つまり自分自身として、単に“1秒ごとに結果を表示し続けるコマンド”として使用しています(※2)。

※2 pingコマンド自身にも、タイムアウトまでの時間を指定するオプション(-w)や、パケットを送る回数を指定するオプション(-c)がある。



コマンド実行例

timeout 時間 コマンド

(制限時間付きでコマンドを実行する)

timeout 10 ping localhost

(「ping localhost」を実行、10秒経過したら終了する)


画面1
画面1 コマンドを終了する時間を指定して実行したところ


送信するシグナルを指定する

 timeoutコマンドが動作する際には、指定した時間が経過しても指定のコマンドが動いていた場合、TERMシグナル(シグナルの数値は15)をコマンドに送信します。他のシグナルを送信したい場合は「-s」オプションでシグナルを指定します(シグナルについては、“応用力”をつけるためのLinux再入門連載第16回を参照)。

 この他、「-k」オプションを使うと、タイムアウトでシグナルを送ってもコマンドが終了しない場合、あらためてKILLシグナルを送って強制終了させます。この場合、「timeout 時間 -k 追加で待つ時間」のように指定します。

 画面2では、「-s」オプションと「-k」オプションの働きを見るために、pingコマンドを使い、起動後10秒たったらSTOPシグナルを送り、5秒後にKILLシグナルを送るように指定しています。

 pingコマンドは、STOPシグナルを受け取って動作を停止します。停止した時点でコマンドラインから「fg」コマンドを実行すると再開しました(“応用力”をつけるためのLinux再入門、第15回)。しかし、STOPシグナル送信後5秒たった時点で強制終了しています。

コマンド実行例

timeout -s シグナル 時間 コマンド名

(指定した時間が経過後にコマンドに送るシグナルを指定する)

timeout -s STOP -k 5 10 ping localhost

(10秒後にpingコマンドへSTOPシグナルを送り、さらに5秒後にKILLシグナルを送る)


画面2
画面2 動作を停止したコマンドを手動で再開後、-kオプションの働きで強制終了したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る