Perl Hackers Hub UNIXプログラミングの勘所(3)
シグナルに関するkazuhoさんの講義(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000603)を読みつつ、分からない基本コンセプトを

- 作者: Abraham Silberschatz
- 出版社/メーカー: John Wiley & Sons Ltd
- 発売日: 2009/02/13
- メディア: ペーパーバック
- 購入: 1人 クリック: 39回
- この商品を含むブログ (4件) を見る
シグナルとは
UNIXにおけるプロセス間通信(IPC)を実現するための方法の1つ。
"Operating System Concept"
A signal is used in UNIX systems to notify a process that a particular event has occurred.
Every signal has a default signal handler that is run by the kernel when handling that signal. This default action can be overridden by a user-defined signal handler that is called to handle the signal.
特定のイベントが発生したことをプロセスに通知するための仕組みで、どのシグナルもデフォルトのハンドラを持っている。デフォルトのシグナルハンドラはユーザがオーバライドできる。
いくつかシグナルを確かめてみる
SIGALRM
kazuhoさんの記事を参考に手軽そうなSIGALRMから。
$SIG{ALRM} = sub { warn 'timeout'; }; alarm 1; # 1秒後にSIGALRMをプロセスに送る sleep 100; print "end\n";
これで100秒を待たずにSIGALRMのハンドラが動作して、sleep 100;を抜けて"end\n"を出力してプロセスが終了する。
SIGTERM
print "$$\n"; local $SIG{TERM} = sub { warn 'SIGTERM'; exit; }; sleep 30;
killはデフォルトでSIGTERM(終了)を送るので、kill [ps id]とすればok。
SIGINT
SIGINT(割り込み)に限らないけど、シグナルを無視することも可能。
local $SIG{INT} = 'IGNORE'; sleep 30;
まとめ
ちょっとシグナルについてわかった(気がする)