正在寻找一种等待所有子进程完成的方法,我找到了这段代码:
while true
p "waiting for child processes"
begin
exited_pid = Process.waitpid(-1,Process::WNOHANG)
if exited_pid and exited_pid > 0 then
p "Process exited : #{exited_pid} with status #{$?.exitstatus }"
end
sleep 5
rescue SystemCallError
puts "All children collected!"
break
end
end
这看起来像Unix系统进程管理一样,就像我在tutorialspoint HERE上读到的那样。
总而言之,它看起来像这段代码:
Process.waitpid
。如果没有退出子进程,请继续。但是在C(Make parent wait for all child processes)中查看等待子进程的类似问题,其中有一个答案:
POSIX定义了一个函数:wait(NULL);.它是waitpid的简写(-1, NULL,0);,它将阻塞,直到所有子进程退出。
我测试过Ruby中的Process.wait()
与上面的详细代码完全相同。
上面更详细的代码有什么好处?或者,这被认为是等待子进程的更好方法?在冗长的代码中,我似乎可以等待特定进程并侦听特定的退出代码。但如果我不需要这样做有什么好处吗?
另外,关于更详细的代码:
Process.waitpid()
的调用会抛出错误?Process.waitpid
只返回队列的顶级成员。这里到底发生了什么?