如何在Perl中捕获信号并且不要停止进程

时间:2014-11-16 19:06:44

标签: perl signals

我正在尝试捕获信号,在我的情况下SIGUSR2,我正在使用下一个代码创建处理信号的子程序

$SIG{USR2} =\&handle_usr2;

sub handle_usr2 {
 open HELLO, ">hello" or die "die" ;
print HELLO "SAYHELLO";
        close HELLO;
}

在这个例子中,我捕获信号并将一些文本打印到文件中。在这个例子中,信号确实进入了句子子程序,它在该进程被终止后写入文件BUT。 因此,无论如何,它都会杀死进程。 但有趣的是,如果要将处理程序设置为' IGNORE'

$SIG{USR2} = 'IGNORE';

它真的忽略了信号并且没有杀死进程,我该如何处理信号并且不会杀死进程。

1 个答案:

答案 0 :(得分:2)

你们其他人的代码是什么样的?

因为这应该可以正常工作,但有一点需要注意(两个 - 你可能会在你的处理程序中发出'die')。 Kill会中断某些系统调用,比如'sleep',你的代码会跳过它。

IGNORE的工作方式略有不同 - 您的代码会在不处理信号的情况下丢弃信号。