ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

timeout コマンドが便利すぎる

(2022-06-17 初稿)

筆者はRaspberry Piで温湿度を測ったりしている。

先日、少し遠い所の温湿度を計測しようと、センサーの接続ケーブルを伸ばしたところ、時々温湿度の取りこぼしエラーが発生するようになってしまった。

単に取りこぼしエラーが発生するだけなら良いのだが、何度かに一度は取得に行ってそのまま返事もなくスクリプトが止まってしまうことがあった。

最初は、ある時間が経過したら、bashスクリプトと子プロセスのPIDを調べてkillしようと考えたが、bashのPIDがなんだか複雑…

もっと簡単な方法はないかと検索したところ、timeoutなるコマンドがあることに気がついた。

使い方は簡単で、実行したいコマンドの前に、timeout 秒数を入力するだけである。

timeout 秒数 実行したいコマンド

ちなみに、timeoutコマンドは、以下のように調べるとcoreutilsに入っているらしい。

dpkg -S $(which timeout)
coreutils: /usr/bin/timeout

こんな便利なコマンドが最初から入っていたなんて知らなかった。

なお、timeoutの使い方については、以下のサイトが詳しかった。多謝。

筆者は主にbashスクリプトから利用するので、サンプルを以下に示す。

ちなみに、timeoutコマンドは時間内にコマンドが正常実行できれば「0」、できなければ「254」を返す。

timeout 3 sleep 2; echo $?
0
timeout 3 sleep 5; echo $?
254

ということで、bashスクリプト例を以下に示す。

#!/bin/bash

timeout 3 sleep 2
if [ $? -eq 0 ]; then
    echo "Success"
else
    echo "Failed"
fi

もっと早くにtimeoutコマンドのこと知りたかったなぁ