シグナルを捕捉してみる
id:naoyaさんが紹介されていたこの本を読み始めました。Perlというより、ネットワークプログラミングの基礎がきっちり書いてあるので、ネットワークプログラミングの基礎が理解できていない自分にとっては、とても勉強になる書籍だと思います。
[rakuten:book:11121444:detail]
とはいえ、まだ第2章までしか読み進めていないのですが、、シグナルのところで出てきたサンプルを少しいじってみました。
Linuxのコマンドライン標準入力から受け取ったINTシグナル(=Ctrl+C)とTSTPシグナル(=Ctrl+Z)を捕捉して、3回目まではガードして実行を続けます。
#!/usr/bin/perl use strict; use warnings; $SIG{INT} = \&guard; $SIG{TSTP} = \&guard; my $counter =0; while ( $counter <= 3 ) { print "--- I'm sleeping 3 sec. ---\n"; sleep 3; } sub guard { my $signal = shift; $counter++; warn 'Guard from $SIG{',$signal,'} (',$counter,'/3)',"\n" if $counter <= 3; } __END__
結果は以下のような感じになります。
webmaster@KURO-BOX:~/work/20080117$ ./signal_test.pl --- I'm sleeping 3 sec. --- --- I'm sleeping 3 sec. --- Guard from $SIG{INT} (1/3) --- I'm sleeping 3 sec. --- Guard from $SIG{TSTP} (2/3) --- I'm sleeping 3 sec. --- Guard from $SIG{INT} (3/3) --- I'm sleeping 3 sec. --- webmaster@KURO-BOX:~/work/20080117$