gpt4 book ai didi

perl - 在 Perl 中忽略信号和告诉它什么都不做有什么区别?

转载 作者:行者123 更新时间:2023-12-04 13:10:25 24 4
gpt4 key购买 nike

如果我告诉 Perl 显式忽略信号,则 SIGINT 无效:

$SIG{INT} = 'IGNORE';
my $count = 0;
say $count++ and sleep 1 while 1;

然后按 Control-C,很明显,没有效果。另一方面,如果我告诉它什么都不做:
$SIG{INT} = sub { };
my $count = 0;
say $count++ and sleep 1 while 1;

然后按Control-C就有效果了!它从 sleep() 调用中唤醒程序并立即增加计数。忽略信号和告诉它什么都不做有什么区别?

在我的程序中,我想让代码在 SIGINT 上运行,而不会破坏任何东西。我想要这样的东西:
$SIG{INT} = sub { say "Caught SIGINT!"; return IGNORED; };  # runs without disrupting sleep

最佳答案

What's the difference between ignoring a signal and telling it to do nothing?



当信号被传递时,你的“什么都不做”处理程序仍然被调用,中断 sleep在这种情况下调用。另一方面,被忽略的信号会被系统简单地丢弃,对过程没有任何影响。

here用于特定于 C 但更全面的引用。

关于perl - 在 Perl 中忽略信号和告诉它什么都不做有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com