以下に、 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
開始するruby script.rb start
と、2つのサブプロセス(合計3つ)が生成されます。私の質問は、実行時にすべてのプロセスを強制終了する方法ruby script.rb stop
です。Webの周りで、開始時にpid親プロセスをファイルに保存し、停止するとそれを読み取って強制終了する必要があることを確認しました。問題は、親を殺しても子供は殺されないということです。したがって、3つのpidをすべてファイルに保存し、後で1つずつ強制終了することができます。
これを行う正しい方法は何か、そして内部のプロセスを操作する方法が正しいかどうかを自問していstart
ます。