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

2017年9月18日

電光掲示板 part3 で電光掲示板のデモプログラムを実行していますが、これらのプログラムは延々と動き続けてしまうので Ctrl-C で止めなければなりませんでした。

これでは不便なので、shellで Ctrl-C に代わる操作をやることができるないかずっと気にしていたんですが、ググったところ、良いのが見つかりました。

スポンサーリンク

shellで Ctrl-c を実現

BashでCtrl-cを実現したい

この shell は、「制限時間を付けて指定のコマンドを実行する」ものです。要は、shell が時間が来ると指定したコマンドを止めてくれます。まさに、60爺の探している物でした。

そして、このページに汎用化の方法も載っています。

まず、下記の shell を作ります。60爺は stopafter と命名しました。

#/bin/sh
x=$1
shift
(sleep $x; sudo kill $)&
exec "$@"

この stopafter を使用して、次の二つの操作を電光掲示板に表示する shell を作成しました。

#/bin/sh
./stopafter 10 sudo python3 simple-square.py -r 16 -c 2 --led-no-hardware-pulse yes
./stopafter 10 sudo python3 pulsing-colors.py -r 16 -c 2 --led-no-hardware-pulse yes

このシェルを実行すると、電光掲示板に1行目の「simple-square.py -r 16 -c 2 –led-no-hardware-pulse yes」が 10秒実行された後、2行目の「pulsing-colors.py -r 16 -c 2 –led-no-hardware-pulse yes」が 10秒実行されることを確認できました。


同一機能のコマンド timeout

上記の stopafter ですが、ラズパイのOSを scratch に上げたところ、どういう訳か正常に機能しなくなりました(ラズパイ電光掲示板用のOSをJessieからstretchにバージョンアップした最終頁)。

原因は未だに判明していません。

そのままにしておくと電光掲示板の表示がおかしくなってしまうので、代替のシェルがないか探ったところ、何とコマンドの中に全く同じ機能を持っているものが見つかりました。

それが timeout コマンドです!

このコマンドは、上述したように「制限時間を付けて指定のコマンドを実行する」もので、使い方は stopafter と全く同じです。

そこで、現在では stopafter を使用していた部分を全て timeoutコマンドに変更しました!

timeoutコマンドの書式は次の通りです。

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

時間のデフォルトは秒です。単位を指定することができ、s(秒)、m(分)、h(時)、d(日)が指定できます。

60爺はオプションは使用しないので、オプションに興味のある方は、こちらのページを参照してください。

スポンサーリンク

コマンド

Posted by mizutan