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
我想 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