Perl system()调用会死吗?

DVK*_*DVK 8 perl eval system die

可以在Perl 5中system()拨打电话die吗?

(换句话说,为了100%防止system()打电话的程序,它是否需要被包装成一个eval,还是完全没必要?)


我没有找到这种可能性perldoc system,但没有找到准确的"这个呼叫永远不会死".

注意:问题是关于这里的基本CORE Perl,没有autodie或任何其他具有类似效果的自定义模块.此外,假设没有ALRM设置信号,或任何其他自定义信号处理程序.

我假设Perl 5.*的所有版本都表现相同,但如果没有,则可以理解与5.8相关的答案.

j.w*_*w.r 6

除非我对源代码的解释不正确,否则这似乎是一种可能性:

来源:Perl 5.16.2(也检查5.8.8),文件:pp_sys.c,行PP(pp_system)代码:4224 :

if (n != sizeof(int))
  DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
Run Code Online (Sandbox Code Playgroud)

DIEPerl_die(pTHX_ const* pat, ...)宣布util.c

根据文档,"恐慌:孩子popen errno读"意味着"分叉的孩子返回了一个关于其错误的难以理解的消息".

panicPerl中的消息说明:

惯例是当解释器因内部错误而死亡时,消息开始"恐慌:".从历史上看,许多恐慌信息都是简洁的固定字符串,这意味着引发恐慌的超出范围的值会丢失.现在我们尝试报告这些值,因为这样的恐慌可能是不可重复的,并且原始错误消息可能是我们在尝试查找原因时获得的唯一诊断.