【问题标题】:Is perl system return code the same as $?perl 系统返回码和 $ 一样吗?
【发布时间】:2014-06-22 17:18:27
【问题描述】:

Perl 的 system() 调用的返回值是否总是与 $ 完全相同?会在同一通话后立即进行吗?

是否有任何内核/外壳/系统故障模式不会出现这种情况,例如系统甚至无法启动子外壳?

(我不是询问位的编码,包括返回码(在高位)、信号和核心转储标志。)

【问题讨论】:

    标签: perl system exit-code


    【解决方案1】:

    Perl 的 system() 调用的返回值是否总是与 $ 完全相同?会在同一个电话后立即?

    是的,它们都来自 Unix 系统调用wait()

    根据system

    返回值是wait调用返回的程序退出状态。

    perlvar:

    $?
    这只是传统 Unix wait() 系统调用返回的 16 位状态字(或者被编造出来的样子)。


    注意:根据wait(2)的原型,即pid_t wait(int *stat_loc),显然system的返回值并不是wait(2)的返回值,wait(2)是一个进程id。是wait(2)通过它的第一个参数返回的子进程退出状态,因为一个C函数只能返回一个值,如果要返回多个值,需要将它们包装在一个结构体中,返回一个值该结构类型,或通过指针类型的参数。

    【讨论】:

    • 阅读手册可以回答很多问题。
    • 我阅读了手册,但引用的部分对我来说并不清楚,因为等待调用的返回是进程 ID,系统显然不会返回,并且可以通过多种方式解释措辞.另外,我想知道 system() 调用内部的故障条件,而不是手册未解决的 fork、shell 或程序中的故障。
    • @user1663987 您误读了该声明。您还应该阅读wait(2) 的手册页,这将阐明该语句的含义。
    • @user1663987: wait 返回进程ID,它还将状态存储在$?中。 wait 存储在$? 中的值与system() 返回 的值相同。
    • 因此,如果我们允许 perl 手册页的“从等待返回”文本与等待手册页的“在第一个参数指针文本中存储 [s] 状态信息”相匹配,那么一切都是运行 perl。但是基思,您的陈述是仅基于文档(我声称没有准确编写)还是对操作更详细的熟悉?我问,因为您的声明隐含地说系统()不会返回错误条件来指示系统/分叉/等故障,除了 -1 表示“其他错误,请检查!$”。这是我的经历,但我一直想知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2011-10-15
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2012-05-14
    • 2015-07-04
    相关资源
    最近更新 更多