シグナル(Unix)
シグナル(signal)とは、UNIX系オペレーティングシステムにおいてプロセス間で非同期イベントの発生を伝える機構。
通常のプログラムだと、 "Ctrl + z" で処理を中断、"fg"で処理を再開できるよ!
perlでシグナルをキャッチする
Ctrl + C でプログラムを終了するときにリソースを開放してやると良いのでなかろうか。
下のコードは Ctrl + c(割り込み), Ctrl + z(中断), Ctrl + \(終了)
use strict;
use warnings;
my $flag = 1;
$| = 1;
$SIG{'STOP'} = sub {
print "STOP!!\n";
};
$SIG{'TSTP'} = sub {
print "TSTP!!\n";
# シグナルをキャッチしたままだと停止しないので、
# SIGSTOP(19)を送信しなおす
kill(19, $$);
};
$SIG{'CONT'} = sub {
print "CONT\n";
};
$SIG{'INT'} = sub {
print "KILLED\n";
die;
};
# SIGQUIT は Ctrl + \ で発生します。
$SIG{'QUIT'} = sub {
$flag = 0;
print "BYE!!\n";
};
my $counter = 1;
while ($flag) {
sleep 1;
if ($counter % 5 == 0) {
kill(20, $$); # SIGTSTP(20) を送る
}
print ".";
print $counter++;
}
||<