5

以下に、 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ます。

4

1 に答える 1