spawn 返回的 PID 与 child 进程的 Process.pid 不同

PID returned by spawn differs from Process.pid of the child process

我想 spawn 一个可能很长的 运行 进程并保存它的 PID,这样我可以在以后需要时终止它。 问题是我从 spawn 获得的 PID 与我从 Process.pid 获得的 PID 不同(在 child 进程中)。 Process.pid 的结果与我在命令行中看到的 运行 ps 匹配。

这是 parent 和 child

的代码

parent.rb

puts "Hi parent"
pid = spawn "ruby child.rb 10 &"
puts pid
Process.detach(pid)
sleep 3
puts "Bye parent"

child.rb

puts "Start pid #{Process.pid}"
sleep ARGV.first.to_i
puts "End pid #{Process.pid}"

输出

Hi parent
1886789
Start pid 1886791
Bye parent
End pid 1886791

看起来后台作业操作员 (&) 导致了中间进程 1886789。当我删除后台作业操作员时,我得到以下输出:

Hi parent
93185
Start pid 93185
Bye parent
End pid 93185