我有代码:
Process.spawn(RbConfig.ruby, "a ruby file", "arg")
我等待并通过以下方式检查其状态:
Process.wait
$?.success?
大多数时候,它运作良好。但有时,$?.success?
为false
,$?.to_i
为0x0100
。似乎失败的进程在0x0100
返回之前没有机会运行任何代码(我没有向进程发送任何信号)。我想知道0x0100
的含义。我还想知道当命令没问题时Ruby的生成是否会失败。有人可以帮忙吗?
答案 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没问题。
无论如何,那里有'没有官方文件提到确切的行为。所以我的经验可供您参考。