Can a system()
打电话可以永远die
在 Perl 5 中?
(换句话说,为了 100% 防崩溃,执行以下操作的程序system()
call, 是否需要将其包装成eval
block,或者这是完全没有必要的?)
我在 中没有发现任何提及这种可能性的内容perldoc system http://perldoc.perl.org/functions/system.html,但也没有找到确切的“这个调用永远不会消失”。
注意:这里的问题是关于基本的 CORE Perl,不是autodie
或任何其他具有类似效果的自定义模块。另外,假设没有ALRM
信号已设置,或与此相关的任何其他自定义信号处理程序。
I'm assuming that all versions of Perl 5.* behave the same, but if not, an answer pertaining to 5.8 would be appreciated.
除非我对来源的解释不正确,否则这看起来是一种可能性:
来源:Perl 5.16.2(也检查了 5.8.8),文件:pp_sys.c,行:4224 内PP(pp_system)
代码块:
if (n != sizeof(int))
DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
DIE
is Perl_die(pTHX_ const* pat, ...)
声明于util.c
根据文档,“panic: Kid popen errno read”意味着“forked child 返回了一条关于其 errno 的难以理解的消息”。
的解释panicPerl 中的消息 http://web.archiveorange.com/archive/v/L3SLVAzhhHs5w7ZUyhl7:
惯例是,当解释器因内部原因而死亡时
错误,消息开始“panic:”。从历史上看,有许多恐慌消息
是简洁的固定字符串,这意味着超出范围的值
那些引发恐慌的人都失去了。现在我们尝试报告这些值,
因为这样的恐慌可能无法重复,并且原始错误消息
当我们试图寻找原因时,这可能是我们得到的唯一诊断。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)