我需要在ruby中运行console命令(在我的情况下启动Gvim),获取Gvim的PID并在几秒钟内终止该进程。
如果我执行以下操作 - 它为我提供了父进程的PID,但我需要以某种方式找出Gvim的PID。
IO.popen("gvim file_name_to_open" { |gvim|
puts gvim.pid
}
如果我执行以下操作,它只会启动Gvim而不会执行任何操作(我需要杀死Gvim进程)。
pid = Process.spawn("gvim", "file_name_to_open")
sleep(5)
Process.kill(9, pid)
Process.wait pid
我做错了什么?
答案 0 :(得分:1)
最合适的解决方案如下:
parent_pid = Process.spawn("gvim", "file_name_to_open")
# Need to wait in order not to kill process till Gvim is started and visible
sleep(5)
Process.kill(9, parent_pid)
# Try to get all Gvim PIDs: the result will look like list of PIDs in
# descending order, so the first one is the last Gvim opened.
all_gvim_pids = `pidof gvim`
last_gvim_pid = all_gvim_pids.split(' ').map(&:to_i).first
Process.kill(9, last_gvim_pid)
解决方案很奇怪,而且没有人有更好的想法:(