作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚阅读了 Leon Timmermans 的文章 What you should know about signal based timeouts我想知道它如何/是否适用于 Sys::SigAction::timeout_call()
的使用。
1) 首先,似乎 timeout_call()
使用了 longjmp
和不安全信号,因此 CERT Secure Coding rule SIG32-C适用。
2) 如果被监控超时的代码只包含纯 perl 代码(即不调用 XS 模块),使用 timeout_call
是否安全?
最佳答案
1) timeout_call()
使用几乎完全相同的习惯用法将系统调用包装在 eval/alarm
block 中,如 Leon 的示例:
my $ALARM_EXCEPTION = "alarm clock restart";
my $h;
eval {
$h = set_sig_handler('ALRM', sub { die $ALARM_EXCEPTION }, { });
alarm 10;
flock $fh, 2 or die "cannot flock: $!";
alarm 0;
};
alarm 0;
$SIG{ALRM} = $h;
if ($@ && $@ !~ quotemeta($ALARM_EXCEPTION)) { die }
因此,如果 set_sig_handler
禁用/覆盖安全信号处理,那么 timeout_call
也会。
2) 纯 Perl 仍然可以与操作系统进行大量交互,并且每个系统调用响应信号的方式在平台之间可能有很大差异。所以一般来说答案是否定的。
关于perl - 使用 Sys::SigAction::timeout_call 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792444/
我刚刚阅读了 Leon Timmermans 的文章 What you should know about signal based timeouts我想知道它如何/是否适用于 Sys::SigAct
我是一名优秀的程序员,十分优秀!