我在下面有一个脚本,它使用Thor像 rake 任务管理一样运行ARGV
。
#!/usr/bin/env ruby
require "thor"
class Run < Thor
desc "start", "start script"
def start
p1 = fork{ loop... }
p2 = fork{ loop... }
# 3 processes running
Process.detach(p1)
Process.waitpid(p1)
end
desc "stop", "stop script"
def stop
# kill all 3 pids
end
end
Run.start
当 start 时ruby script.rb start
,它会生成两个子进程(总共三个)。我的问题是如何在我执行时杀死所有进程ruby script.rb stop
。我在网上看到,在启动时,我应该将 pid 父进程存储到一个文件中,当停止时,我读取它并杀死它。问题是杀死父母不会杀死孩子。所以我可以将所有三个pid都保存在文件中,然后一一杀死。
我在问自己什么是正确的方法,以及我在内部处理流程的方式start
是否正确。