#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS