在我写的Perl脚本中,我遇到了一个问题,我阻塞INT和QUIT信号,在反引号中执行一个进程,然后解除对INT和QUIT信号的阻塞.我想阻止INT或QUIT到达子进程并将其终止.
该脚本在代码中的正确位置处成功阻塞和解除阻塞,但是,它不会延迟信号并执行我在阻塞模式下配置的处理程序,正如许多引用所说的那样.我知道它是解锁的,因为我可以在阻塞或解除阻塞命令之前或之后发送一个SIGINT并且它受到尊重.
操作系统:Linux 2.6.30
Perl版本:5.8.8
代码片段:
#!/usr/local/bin/perl use POSIX qw(:signal_h); $SIG{'INT'} = 'gracefulExit'; sub gracefulExit { print "Caught Signal = GOOD\n"; exit; } print "Recieving a SIGINT works here\n"; sleep 5; my $sigset = POSIX::SigSet->new; my $blockset = POSIX::SigSet->new(SIGINT); sigprocmask(SIG_BLOCK,$blockset,$sigset) or die "dying at block...\n"; print "Recieving a SIGINT doesn't work here [GOOD!] and is NOT delayed [WHY!?].\n"; `/bin/sleep 5`; sigprocmask(SIG_UNBLOCK,$blockset) or die "dying at unblock...\n"; print "Recieving a SIGINT works here again [GOOD!]\n"; sleep 5; print "Exited without receiving a signal\n";