对于`Process :: Status`值,“0x0100”的含义是什么?

时间:2015-12-01 15:36:49

标签: ruby process standard-library

我有代码:

Process.spawn(RbConfig.ruby, "a ruby file", "arg")

我等待并通过以下方式检查其状态:

Process.wait
$?.success?

大多数时候,它运作良好。但有时,$?.success?false$?.to_i0x0100。似乎失败的进程在0x0100返回之前没有机会运行任何代码(我没有向进程发送任何信号)。我想知道0x0100的含义。我还想知道当命令没问题时Ruby的生成是否会失败。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

以下是Process :: Status类文档的引用:

  

Posix系统使用16位整数记录有关进程的信息。较低位记录过程状态(停止,退出,发信号),高位可能包含附加信息(例如,在退出过程的情况下程序的返回码)。在Ruby 1.8之前,这些位直接暴露给Ruby程序。 Ruby现在将它们封装在Process :: Status对象中。然而,为了最大化兼容性,这些对象保留了面向位的接口。在下面的描述中,当我们讨论stat的整数值时,我们指的是这个16位值。

方法Process :: Status#to_i将此统计信息作为Fixnum返回。

答案 1 :(得分:0)

好的,最后我得到了答案:当ruby进程抛出未捕获的异常时,进程'退出代码将为0x0100。这是我对Ubuntu 14.04和Ruby 2.2的观察。例如:有一个ruby文件a.rb,而在另一个文件中,比如src.rb,那里有一个代码片段:

Process.spawn(RbConfig.ruby, "a.rb", "arg")
Process.wait

如果a.rb抛出未捕获的异常,那么$ ?. to_i将为0x0100。更重要的是,我还观察到a.rb有时在它的进程失败之前没有执行0x0100。所以我想这可能与Ruby解释器有关,因为我确定a.rb没问题。

无论如何,那里有'没有官方文件提到确切的行为。所以我的经验可供您参考。