ファイヤープロジェクト
シグナルのトラップ
2003-07-20T15:13+09:00   matsu
シグナルとは非同期で生成されるイベントである.シグナルはシステムによって生成される.ユーザがプロセスを生成するには,ctrl-zとかctrl-cなど,そしてkillコマンドなどがある.BASHスクリプトではtrapコマンドによってプロセスがどのシグナルを受け取ったらどんな処理を行うかをあらかじめ登録しておくことができる.
シグナルのトラップは,スクリプトにおいてtrapが読み込まれた時点以降から有効となる.だからシグナルのトラップを有効にしたい範囲の前にtrapコマンドを記述する必要がある.
#!/bin/sh
トラップしない部分
trapコマンド
トラップする部分
trapコマンドの構文を以下に示す.
trap 文 シグナル
文はシグナルを受け取ったと気に実行するコマンドである.文が-か無記述ならばそのBASHが起動された時点での値にリセットされる.文が空文字列ならばそのシグナルは無視される.トラップできるシグナルとシグナル番号は以下のコマンドで表示できる.
trap -l
これらのうちよく使うものを以下に示す.
HUP
ハンブアップしたとき(端末の回線が切れたりユーザがログアウトしたとき)に送れらる.
INT
インタラプト.ctrl-cで送信できる.
QUIT
ctrl-\で送信できる.
ABRT
アボートしたときに送信される.
TERM
shutdownするときに送られる.
あるシグナルに設定されているトラップを表示するには,以下のようにする.
trap -p シグナル
設定されている全てのトラップを表示するには以下のようにする.
trap
もしくは
trap -p
matsu(C)
Since 2002
Mail to matsu