Fix for double fork
This commit is contained in:
@@ -72,10 +72,17 @@ private ######################################################################
|
|||||||
def kill_all(signal="SIGTERM")
|
def kill_all(signal="SIGTERM")
|
||||||
running_processes.each do |pid, process|
|
running_processes.each do |pid, process|
|
||||||
info "sending #{signal} to pid #{pid}"
|
info "sending #{signal} to pid #{pid}"
|
||||||
|
kill(signal, -pid) or kill(signal, pid)
|
||||||
Process.kill(signal, pid) rescue Errno::ESRCH
|
Process.kill(signal, pid) rescue Errno::ESRCH
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def kill(signal, pid)
|
||||||
|
Process.kill signal, pid
|
||||||
|
rescue Errno::ESRCH
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
def terminate_gracefully
|
def terminate_gracefully
|
||||||
info "sending SIGTERM to all processes"
|
info "sending SIGTERM to all processes"
|
||||||
kill_all "SIGTERM"
|
kill_all "SIGTERM"
|
||||||
|
|||||||
@@ -30,11 +30,13 @@ private
|
|||||||
def fork_with_io(command)
|
def fork_with_io(command)
|
||||||
reader, writer = IO.pipe
|
reader, writer = IO.pipe
|
||||||
pid = fork do
|
pid = fork do
|
||||||
|
Process.setpgrp
|
||||||
trap("INT", "IGNORE")
|
trap("INT", "IGNORE")
|
||||||
$stdout.reopen writer
|
$stdout.reopen writer
|
||||||
reader.close
|
reader.close
|
||||||
exec Foreman.runner, replace_command_env(command)
|
exec Foreman.runner, replace_command_env(command)
|
||||||
end
|
end
|
||||||
|
Process.detach pid
|
||||||
[ reader, pid ]
|
[ reader, pid ]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user