再起動等の意味合いがあるシグナル
ただ、機能をちゃんと作らないと普通の停止シグナルと同じ
実際のところ
とりあえず使う
前回のスクリプトをベースにHUP(シグナル番号1)を捕まえる処理を書くとこんな感じに。
つかんだ処理を分かり易くするため、起動のあたまにechoを追加。
$ cat testExit.bash #! /bin/bash COUNT=0 function catchHup () { printf " Got HUP SIG\n\n" COUNT=0 } trap "printf '\n\r`basename $0` is closing.'" EXIT trap "printf '\n\r良夫ちゃんゴハンの時間ヨ\n'" 14 trap catchHup HUP echo "wake up" while true do COUNT=$((COUNT + 1)) printf "\r%07s%3d" "" $COUNT sleep 1 done
この状態で実行し四回"pkill -1 testExit"を投入したログはこんな感じに。
この処理では通常の処理と同様に頭から読み直すという意味ではない様子。
$ ./testExit.bash wake up 5 Got HUP SIG 5 Got HUP SIG 2 Got HUP SIG 7 Got HUP SIG 6
再起動処理をしてみる
本命の再起動処理です。
basenameコマンドで自身の名前を確保し、(実行権限付加してあるので)そのまま立ち上げという流れ。
検証用に、ループ内でタイムアウト的にHUPシグナルを叩きこむ処理も追加してみました。
$ cat testExit.bash #! /bin/bash COUNT=0 function catchHup () { printf " Got HUP SIG\n\n" ./$(basename $0) && exit } trap "printf '\n\r`basename $0` is closing.'" EXIT trap "printf '\n\r良夫ちゃんゴハンの時間ヨ\n'" 14 trap catchHup HUP echo "wake up `basename $0`" while true do COUNT=$((COUNT + 1)) printf "\r%07s%3d" "" $COUNT sleep 1 if [ $COUNT -gt 10 ] ; then pkill -1 $(basename $0) fi done
最初はタイムアウトで、その次に2回HUPを叩きこんだ処理結果がこちら
./testExit.bash wake up testExit.bash 11 Got HUP SIG wake up testExit.bash 4 Got HUP SIG wake up testExit.bash 4 Got HUP SIG wake up testExit.bash ...