在Ruby on Windows中杀死进程和子进程
目前,我正在一个命令提示符下执行此操作在Ruby on Windows中杀死进程和子进程,ruby,windows,win32-process,Ruby,Windows,Win32 Process,目前,我正在一个命令提示符下执行此操作 require 'win32/process' p = Process.spawn("C:/ruby193/bin/bundle exec rails s") puts p Process.waitpid(p) 然后在另一个 require 'win32/process' Process.kill(1,<p>) 需要“win32/进程” 进程终止(1,) 问题是我生成的进程(本例中是Rails服务器)生成了一系列子进程。kill命令不会杀
require 'win32/process'
p = Process.spawn("C:/ruby193/bin/bundle exec rails s")
puts p
Process.waitpid(p)
然后在另一个
require 'win32/process'
Process.kill(1,<p>)
需要“win32/进程”
进程终止(1,)
问题是我生成的进程(本例中是Rails服务器)生成了一系列子进程。kill命令不会杀死它们,它只是让它们成为孤儿,没有父对象
你知道我如何杀死整个繁殖过程及其所有子进程吗?我最终通过以下方式解决了这个问题 首先,我安装了sysproctable gem
gem install 'sys-proctable'
然后使用最初发布的代码来生成进程,并使用下面的代码来终止它(为了简洁起见,省略了错误处理)
需要“win32/进程”
需要“sys/proctable”
包括Win32
包括系统
to_kill=..//衍生过程的PID控制
ProcTable.ps do | proc|
要杀死一个没有任何宝石的脚本解决方案。运行脚本,CTRL-C停止所有操作:
processes = []
processes << Process.spawn("<your process>")
loop do
trap("INT") do
processes.each do |p|
Process.kill("KILL", p) rescue nil
Process.wait(p) rescue nil
end
exit 0
end
sleep(1)
end
进程=[]
进程我想知道获取进程的循环是否可靠。在linux上,进程可能会出问题,因此可能需要几次迭代才能全部完成。我不知道这会如何工作spawn
返回单个pid(不是所有子pid)。将该pid添加到数组并循环的事实是多余的。
processes = []
processes << Process.spawn("<your process>")
loop do
trap("INT") do
processes.each do |p|
Process.kill("KILL", p) rescue nil
Process.wait(p) rescue nil
end
exit 0
end
sleep(1)
end