我正在尝试捕获信号,在我的情况下SIGUSR2,我正在使用下一个代码创建处理信号的子程序
$SIG{USR2} =\&handle_usr2;
sub handle_usr2 {
open HELLO, ">hello" or die "die" ;
print HELLO "SAYHELLO";
close HELLO;
}
在这个例子中,我捕获信号并将一些文本打印到文件中。在这个例子中,信号确实进入了句子子程序,它在该进程被终止后写入文件BUT。 因此,无论如何,它都会杀死进程。 但有趣的是,如果要将处理程序设置为' IGNORE'
$SIG{USR2} = 'IGNORE';
它真的忽略了信号并且没有杀死进程,我该如何处理信号并且不会杀死进程。
答案 0 :(得分:2)
你们其他人的代码是什么样的?
因为这应该可以正常工作,但有一点需要注意(两个 - 你可能会在你的处理程序中发出'die')。 Kill会中断某些系统调用,比如'sleep',你的代码会跳过它。
IGNORE
的工作方式略有不同 - 您的代码会在不处理信号的情况下丢弃信号。