正如它在锡上所说的
pid = Process.fork do
exit 25
end
除了告诉我叉子运行的实际系统进程号之外, pid
似乎没用。 Thread
会更有用吗?
答案 0 :(得分:1)
来自fork
的手册:
父进程应使用Process.wait
收集其子女的终止状态,或使用Process.detach
注册对其状态的不感兴趣;否则,操作系统可能会累积僵尸进程。
所以在你的情况下:
status = Process.wait(pid)
线程与多进程模型完全不同。如果您正在编写并行代码,则需要确定最佳方法。
答案 1 :(得分:1)
@tadman 的回答不正确。
Process::wait
返回 pid 而不是状态,参见 https://ruby-doc.org/core-3.0.1/Process.html#wait-method
等待子进程退出,返回其进程ID,并设置$?到包含该进程信息的 Process::Status 对象。
就你而言:
pid = fork{exit 25} #=> 98287
Process.wait(pid) #=> 98287
$?.class #=> Process::Status
$?.exitstatus #=> 25
$?.to_i #=> 98287
$?.stopped? #=> false
$?.exited? #=> true
带螺纹:
pid = fork{ exit 123 }
thread = Process.detach(pid)
thread.join.value #=> #<Process::Status: pid 99172 exit 123>
thread.join.value.exitstatus #=> 123
答案 2 :(得分:0)
由于我遇到了同样的问题,我最终使用了$?
。
$?最后执行的子进程的状态。
你能做的是
pid = Process.fork do
exit 25
end
Process.wait pid
exit_status = $?