perl - 我可以为Perl中的所有信号设置一个信号处理程序吗?

标签 perl signals

在Perl中是否可以为接收到的所有信号仅安装一个信号处理程序?这背后的原因是,我不知道我的Perl代码在运行时会收到什么信号。我可以看到的一种方法是将所有可用信号指向我的自定义信号处理程序,但是我不想这样做。有没有简单的方法可以做到这一点?就像是:

$SIG{'ALL'} = 'sigHandler';

最佳答案

您真的不想这样做。仅针对您需要以不同于默认方式处理的信号安装信号处理程序(我们无法为您提供帮助,因为您没有提到您正在编写哪种类型的应用程序)。

在大多数正常情况下,您根本不需要编写信号处理程序-默认设置是完全按照您的需要进行的。您现在应该阅读perldoc perlipc,以便您了解与正常情况不同的情况。

您可以使用sigtrap pragma一次修改多个信号:这对于添加正常捕获的信号的处理程序或使正常错误处理更加严格非常有用。

# install a trivial handler for all signals, as a learning tool
use sigtrap 'handler' => \&my_handler, 'signal';
sub my_handler
{
    print "Caught signal $_[0]!\n";
}

关于perl - 我可以为Perl中的所有信号设置一个信号处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841032/

相关文章:

c# - SignalR 在 2020 年是否相关?

perl - 使用 Mojo::DOM 在标题后提取未标记的文本

javascript - 如何根据点击的链接更改点击事件的结果

c++ - 从 C++ 中的 posix 信号处理程序获取对象属性

c - 当我从信号处理程序调用非异步安全函数时,它总是不安全吗?

创建新信号或复用 SIGALRM?

perl 在脚本和 PerlCritic 中使用 bless self

perl - 使用 prepare 和 execute 避免 SQL 注入(inject)

perl - 如何从Perl XS查找当前软件包名称?

c++ - Linux (Fedora 13) 与 OS X 中的 sigwait