16.20 シグナルをブロックする

シグナルの受け取りを遅らせたい。その目的は、任意の時点でプログラムに割り込む可能性のあるシグナルによって、予想外の動作が引き起こされるのを防止するためである。

use POSIX qw(:signal_h);

$sigset = POSIX::SigSet->new(SIGINT);  # ブロックするシグナルを定義する
$old_sigset = POSIX::SigSet->new;   # 元のシグナルマスクを保存しておく

sigprocmask(SIG_BLOCK, $sigset, $old_sigset) 
  or die "Cannot block SIGINT\n";
  • ブロックを解除する場合
defined sigprocmask(SIG_UNBLOCK, $old_sigset)
  or die "Cannot unblock SIGINT\n";