Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby on Windows中杀死进程和子进程_Ruby_Windows_Win32 Process - Fatal编程技术网

在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