在我编写的Perl脚本中,我遇到了一个问题:我阻止了
脚本成功地在代码的正确部分阻止和解除阻止,但是,它不会延迟信号并在阻塞模式下执行我配置的处理程序,就像许多参考所说的那样。我知道它解除了阻止,因为我可以在阻止或解除阻止命令之前或之后发送
操作系统: Linux 2.6.30 Perl版本: 5.8.8
代码片段:
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";