株式会社エスロジカル
株式会社エスロジカル
セキュリティプロダクツ提供
Web開発、システム開発、UNIXシステム構築
個人情報保護方針

技術ドキュメント

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

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



[オススメ] 国内最安のSSL証明書(RapidSSL 2880円、ジオトラスト 10500円、ベリサイン 39900円)
[オススメ] SSL証明書のアフィリエイトプログラム(最大11700円/1件の報酬を獲得いただけます)

◆ %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. ご感想をご自由にお書きください。



自社運営サイト: SSL証明書 / 改ざん検出 / 秘密分散法 / 暗号化ソフト / OpenIDサイト一覧 / IPアドレス表示 / リンク切れチェック / RapidSSL / ジオトラスト / ベリサイン / SSL

Copyright (C) 2006-2008 Slogical Corporation. All Rights Reserved.
ご意見などは、こちらのお問い合わせ用ページ からお願いいたします。

本サイト上の文書で記載または紹介している会社名、商品名は一般に各社の商標または登録商標です。
本サイト上の文書中では、TM マークおよび R マークを明記していない場合があります。