#navi(../)
* シグナルを受ける方法 [#fe0bf949]
killコマンドやCtrl+Cによるシグナルを受ける方法を記します。
#br
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
** シグナル [#b58bb07d]
以下に記すシグナルを対象にスクリプトを記述してみます。
|ハングアップ|HUP|1|
|割り込み(CTRL+C)|INT|2|
|終了|QUIT|3|
|強制終了|TERM|15|
シグナルの一覧を確認したい場合は、[[逆引きUNIXコマンド/killコマンドのシグナル名称と値を知りたい]]を参照してください。
** サンプル [#n68f1f99]
#ref(signal-1.sh)
#!/bin/bash
trap "echo SIGNAL HUP; exit 1" 1
trap "echo SIGNAL INT; exit 1" 2
trap "echo SIGNAL QUIT; exit 1" 3
trap "echo SIGNAL TERM; exit 1" 15
while :
do
sleep 1
done
他の端末よりkillコマンドにてプロセスを強制終了(TERM)させてみた結果です。~
下記の通り、SIGNAL TERMが表示されています。
+ 本シェルスクリプト起動
#ref(term-01.gif)
#br
+ 別の端末よりkillを発行
#ref(term-02.gif)
#br
+ トラップで記述した部分が動作する
#ref(term-03.gif)
#br
** 複数シグナルの指定 [#m06e2471]
以下のように複数のシグナルを指定することもできます。
trap "echo SIGNAL; exit 1" 1 2 3 15
** シグナルを受けたあと終了処理をしたい場合 [#j7ed96bd]
シグナルを受けた後、後処理をしたい場合は、以下のようにfunctionをつくればよいでしょう。
#ref(signal-2.sh)
#!/bin/bash
trap "HUP; exit 1" 1
trap "INT; exit 1" 2
trap "QUIT; exit 1" 3
trap "TERM; exit 1" 15
function HUP {
echo "function HUP"
}
function INT {
echo "function INT"
}
function QUIT {
echo "function QUIT"
}
function TERM {
echo "function TERM"
}
while :
do
sleep 1
done
#br
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
#br