diff --git a/lib/foreman/engine.rb b/lib/foreman/engine.rb index a1316593..3b2c32b7 100644 --- a/lib/foreman/engine.rb +++ b/lib/foreman/engine.rb @@ -191,14 +191,14 @@ def kill_children(signal="SIGTERM") @running.each do |pid, (process, index)| system "sending #{signal} to #{name_for(pid)} at pid #{pid}" begin - Process.kill(signal, pid) + Process.kill("-#{signal}", pid) rescue Errno::ESRCH, Errno::EPERM end end else begin pids = @running.keys.compact - Process.kill signal, *pids unless pids.empty? + Process.kill("-#{signal}", *pids) unless pids.empty? rescue Errno::ESRCH, Errno::EPERM end end diff --git a/lib/foreman/process.rb b/lib/foreman/process.rb index ee3de948..ec0746b9 100644 --- a/lib/foreman/process.rb +++ b/lib/foreman/process.rb @@ -49,9 +49,11 @@ def run(options={}) env = @options[:env].merge(options[:env] || {}) output = options[:output] || $stdout runner = "#{Foreman.runner}".shellescape - + + pgroup = Foreman.windows? ? :new_pgroup : :pgroup + Dir.chdir(cwd) do - Process.spawn env, expanded_command(env), :out => output, :err => output + Process.spawn env, expanded_command(env), :out => output, :err => output, pgroup => true end end