Perl - sigtrap
名前
sigtrap - 単純なシグナル処理を可能にするための Perl プラグマ
書式
use sigtrap; use sigtrap qw(stack-trace old-interface-signals); # equivalent use sigtrap qw(BUS SEGV PIPE ABRT); use sigtrap qw(die INT QUIT); use sigtrap qw(die normal-signals); use sigtrap qw(die untrapped normal-signals); use sigtrap qw(die untrapped normal-signals stack-trace any error-signals); use sigtrap 'handler' => \&my_handler, 'normal-signals'; use sigtrap qw(handler my_handler normal-signals stack-trace error-signals);
概要
sigtrap プラグマはシグナル処理を行うためのシンプルなインターフェイスである。sigtrap 自身によって提供される二つのハンドラのうち一つ(一つは Perl スタックトレースを提供し、もう一つは単純に "die()" を提供する)、あるいはユーザ自身のハンドラを用いることができる。捕捉されないあるいは無視されるシグナルに対しては、ハンドラとして設定されたことのみが伝えられる。sigtrap には捕捉されるシグナルのリストがあるが、ユーザ自身のシグナルのリストを渡すこともできる。
sigtrap を利用する "use" の記述へ渡される引数は順に処理される。sigtrap のシグナルリストに含まれるシグナル名が渡された場合はハンドラはすぐに設定され、オプションが渡された場合はその後に設定されたハンドラに対して影響を及ぼす。
オプション
シグナルハンドラ
これらのオプションは後に設定されたシグナルとして利用されるハンドラについて影響を及ぼす。
- stack-trace
- 後に続いて設定されたシグナルとして利用されるハンドラについて、Perl スタックトレースを標準エラー出力へと出力し、コアダンプを試みる。デフォルトのシグナルハンドラである。
- die
- 後に続いて設定されたシグナルとして利用されるハンドラについて、どのシグナルが補足されたかを示すメッセージ付きで "die"(実際は "croak" である)を呼び出す。
- handler your-handler
- your-handler は後に続いて設定されるシグナルへのハンドラとして利用される。your-handler は %SIG の要素として設定される値と同様のものであればどのような値でも良い。ハンドラ関数の例については perlvar を参照すること。
シグナルリスト
sigtrap には捕捉されるシグナルのいくつかのビルトインのリストがある。
- normal-signals
- これらはプログラムによって通常発生することが予期されているシグナルであり、デフォルトでは終了させる。HUP, INT, PIPE, TERM である。
- error-signals
- これらのシグナルは通常 Perl インタプリタあるいはスクリプトについて深刻な問題があることを示すものである。ABRT, BUS, EMT, FPE, ILL, QUIT, SEGV, SYS, TRAP である。
- old-interface-signals
- これらは古い sigtrap インターフェイスによってデフォルトで捕捉されていたシグナルである。ABRT, BUS, EMT, FPE, ILL, PIPE, QUIT, SEGV, SYS, TERM, TRAP である。どのシグナルあるいはシグナルリストも sigtrap に渡されなければ、このリストが用いられる。
三つのそれぞれのリストでは、リスト中の補足されるようセットされたシグナルの全ては補足される前にチェックが行われる; もしもアーキテクチャが特定のシグナルを実装していなければ、捕捉されずに無視される。
その他
- untrapped
- sigtrap に対して、既に捕捉あるいは無視されていない後に続いて列挙されたシグナルのみについてハンドラを設定するように指定する。
- any
- sigtrap に対して、全ての後に続いて列挙されたシグナルについてハンドラを設定するよう指定する。デフォルトの振る舞いである。
- signal
- シグナル名として推定される名前(つまり、"/^[A-Z][A-Z0-9]*$/")を持つ引数 signal について sigtrap がハンドラを設定するように指定する。
- number
- 用いられる sigtrap の最低のバージョンを数字で指定する。
例
old-interface-signals に対してスタックトレースを提供する。
use sigtrap;
同上:
use sigtrap qw(stack-trace old-interface-signals);
4 つの列挙されたシグナルのみについてスタックトレースを提供する。
use sigtrap qw(BUS SEGV PIPE ABRT);
INT あるいは QUIT を捕捉した時に die を行う。
use sigtrap qw(die INT QUIT);
HUP, INT, PIPE, TERM を捕捉した時に die を行う。
use sigtrap qw(die normal-signals);
HUP, INT, PIPE, TERM を捕捉した時に die を行うが、既に捕捉あるいは無視されているシグナルについては除く。
use sigtrap qw(die untrapped normal-signals);
現在捕捉されていない normal-signals に含まれるシグナルのうち一つを受けた時に die を行い、error-signals に含まれるシグナルを受けた時にスタックトレースを提供する。
use sigtrap qw(die untrapped normal-signals stack-trace any error-signals);
normal-signals に含まれるシグナルについてハンドラとして myhandler() を設定する。
use sigtrap 'handler', \&my_handler, 'normal-signals';
normal-signals に含まれるシグナルについてハンドラとして myhandler() を設定し、error-signals に含まれるシグナルを受け取った時に Perl スタックトレースを提供する。
use sigtrap qw(handler my_handler normal-signals stack-trace error-signals);
Last modified:2009/08/27 22:49:30
0.161572