【 timeout 】コマンド――制限時間を付けて指定のコマンドを実行する:Linux基本コマンドTips(316)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、制限時間を付けて指定のコマンドを実行する「timeout」コマンドです。
本連載は、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秒経過したら終了する)
送信するシグナルを指定する
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シグナルを送る)
筆者紹介
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.