株式会社エスロジカル
株式会社エスロジカル
セキュリティ、Web開発、Unix開発、Go言語

■ Perl:%SIGによるシグナルの制御

技術ドキュメント目次 -> Perl -> %SIGによるシグナルの制御

本技術ドキュメントは、ここしばらくメンテナンスをしておりません。
内容が古くなっている可能性などございますこと、ご理解を頂けますようお願いいたします。


サイフにやさしいSSL証明書
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。


◆ %SIGによるシグナルの制御

%SIGという特殊な連想配列の値を変更することで、
Perl のスクリプトの中からもシグナルの制御を行うことが可能になります。

次のような構文でシグナルを受け取った時に処理されるサブルーチンを指定することができます。

$SIG{シグナル名} = サブルーチン名;


例えば、プログラム実行中に Ctrl-C を入力したので、
プログラムがSIGINTを受け取るような例として、
次のようなコードがあった場合、

sub MySighandler {
        if (-f "./test.txt") {
                print STDERR "removing ./test.txt ...\n";
                unlink ("./test.txt");
        }
        exit(0);
}

open(FILE, "> ./test.txt");
close(FILE);

$SIG{'INT'} = 'MySighandler';

sleep(100);

print STDERR "exiting...\n";
exit(0);


それを実行すると次のようになります。

$ perl test.pl  (すぐ、Ctrl-C を入力して終了させる)
removing ./test.txt ...
$


プログラムが途中で終了してしまったときに、
作業ファイルを残さないようにするときなどに便利です。

◆ シグナルの制御をデフォルトに戻すには

次のような指定を行うことで、
シグナルの制御をデフォルトの状態に戻すことができます。

$SIG{シグナル名} = 'DEFAULT';


メインロジックの処理途中にのみシグナルの制御を独自に変更したい場合には、
次のようにするのがいいかと思います。


$SIG{'INT'}  = 'MySighandler';
$SIG{'TERM'} = 'MySighandler';
{
        ......(メインロジック)
}
$SIG{'INT'}  = 'DEFAULT';
$SIG{'TERM'} = 'DEFAULT';



◆ シグナルを無視するには

次のように、'IGNORE' を代入することで、
シグナルを受け取ったときにそれを無視するようにできます。

$SIG{シグナル名} = 'IGNORE';


◆ シグナルの一覧を確認

kill -l コマンドを実行することで、
そのOS環境で実装されているシグナルの一覧を確認することができます。

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD
18) SIGCONT     19) SIGSTOP     20) SIGTSTP     21) SIGTTIN
22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO
30) SIGPWR      31) SIGSYS      32) SIGRTMIN    33) SIGRTMIN+1
34) SIGRTMIN+2  35) SIGRTMIN+3  36) SIGRTMIN+4  37) SIGRTMIN+5
38) SIGRTMIN+6  39) SIGRTMIN+7  40) SIGRTMIN+8  41) SIGRTMIN+9
42) SIGRTMIN+10 43) SIGRTMIN+11 44) SIGRTMIN+12 45) SIGRTMIN+13
46) SIGRTMIN+14 47) SIGRTMIN+15 48) SIGRTMAX-15 49) SIGRTMAX-14
50) SIGRTMAX-13 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10
54) SIGRTMAX-9  55) SIGRTMAX-8  56) SIGRTMAX-7  57) SIGRTMAX-6
58) SIGRTMAX-5  59) SIGRTMAX-4  60) SIGRTMAX-3  61) SIGRTMAX-2
62) SIGRTMAX-1  63) SIGRTMAX
$




■ Perl についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。