シェルの仕組みを誤解 LEDパネル5時間動きっぱなし

シェアする

Pocket

シェルで、Ctrl-Cをやることができるのか、前から気になっていたのですが、ググったら、いいのが見つかりました。

BashでCtrl-cを実現したい

(sleep 5;kill $$)& をコマンドの前に挿入すると、5秒後に止まります。というか、killされて、コマンド実行が停止します。

電光掲示板のpythonサンプルは、時間で止められないので、こいつを試してみました。

#!/bin/sh
(sleep 10;sudo kill $$)&
exec sudo python3 pulsing-brightness.py -r 16 -c 2 --led-no-hardware-pulse yes

実行結果です。

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ ./kill_sample.sh
Press CTRL-C to stop sample

10秒後に、プログラムが止まりました。
すばらしい。

ただ、これだと、シェルの中に、ひとつの命令しかして出来ません。複数やるには、さきほどのページに答えが載っております。

まず、下記を作ります。

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ cat stopafter
#!/bin/sh
x=$1
shift
(sleep $x; sudo kill $$)&
exec "$@"

でもって、次の二つの命令を指定します。

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ cat kill_sample.sh_old
#!/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
◆以下、失敗談

実は、最初は、こんなコマンドでやってました。そうしたら、pythonのプログラムが止まっていなくて、LEDパネルが、ずーっと動きつづけていたんですよ。家に帰って、書斎の中が、赤や緑や青で光り輝いているのに気づきました。概ね、5時間くらい動き続けていたようです。原因は、sudoの前にexec指定が無いがなかったためでした。参考のコマンドはよく見て、間違い内容にやりましょう。

#!/bin/sh
(sleep 10;sudo kill $$)&
 sudo python3 pulsing-brightness.py -r 16 -c 2 --led-no-hardware-pulse yes

実効の際、下記のように、Terminatedが表示され、これでうまくkillされたと勘違いしてしまいました。

まア、勉強になりました。

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ ./kill_sample.sh
Press CTRL-C to stop sample
Terminated
スポンサーリンク

シェアする

フォローする