いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

指定コマンドをN秒間だけ起動して終了させる (linux, timeout)

関連記事

概要

以下、自分用のメモです。使いたいときによく忘れるのでここにメモメモ。。。

なにかのコマンドを指定の秒数だけ起動して終了させたいということは結構あります。

コマンドをバックグラウンドで起動して、sleepコマンドで所定時間待ってから、killしても良いのですが

linux系なら、timeout コマンドがありますので、こっち使った方が楽です。

コマンドの書式は以下となります。

timeout [オプション] DURATION COMMAND [ARG]...

試してみる

例えば、sleep コマンドを以下のように実行すると

$ time sleep 5

real    0m5.001s
user    0m0.001s
sys     0m0.000s

当然ながら、5秒間ジーッとなって、コマンドが終わります。

これを以下のようにしてみます。

$ time timeout 2s sleep 5

real    0m2.031s
user    0m0.002s
sys     0m0.000s

timeout で指定した秒数でちゃんと終わってくれます。

例えば、tcpdumpコマンドを使ってpcapファイルを作ろうとする場合に3秒間だけキャプチャした結果が欲しい場合は以下のように出来ます。

$ sudo timeout 3s tcpdump -i eth0 -w example.pcap 'tcp port 8080'

自分で作ったコマンドがいつまでたっても処理が終わらない場合を考慮してタイムアウト制限をつけて実行する場合とか結構便利です。

参考情報

Man page of TIMEOUT


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。