このエントリーをはてなブックマークに追加


シグナルを受ける方法

killコマンドやCtrl+Cによるシグナルを受ける方法を記します。

 

シグナル

以下に記すシグナルを対象にスクリプトを記述してみます。

ハングアップHUP1
割り込み(CTRL+C)INT2
終了QUIT3
強制終了TERM15

シグナルの一覧を確認したい場合は、逆引きUNIXコマンド/killコマンドのシグナル名称と値を知りたいを参照してください。

サンプル

#!/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が表示されています。

  1. 本シェルスクリプト起動
    term-01.gif
     
  2. 別の端末よりkillを発行
    term-02.gif
     
  3. トラップで記述した部分が動作する
    term-03.gif
     

複数シグナルの指定

以下のように複数のシグナルを指定することもできます。

trap "echo SIGNAL; exit 1" 1 2 3 15

シグナルを受けたあと終了処理をしたい場合

シグナルを受けた後、後処理をしたい場合は、以下のようにfunctionをつくればよいでしょう。

#!/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
 

 

添付ファイル: filesignal-1.sh 556件 [詳細] fileterm-02.gif 614件 [詳細] fileterm-03.gif 627件 [詳細] filesignal-2.sh 546件 [詳細] fileterm-01.gif 616件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:01