Если я создал процессы с Process.new
, их можно убить с помощью .kill
.Однако они становятся зомби в ловушке Сигнала:
PROCESSES = {} of Int32 => Process
spawn {
loop { sleep 1 }
}
spawn {
x = Process.new("sleep", "100".split)
x.kill
sleep 0.4
puts x.terminated?
x = Process.new("sleep", "100".split)
PROCESSES[x.pid] = x
}
Signal::INT.trap {
Signal::INT.reset
PROCESSES.each { |pid, x|
puts "killing: #{pid}"
x.kill
sleep 1
puts "killed #{pid}? #{x.terminated?}"
}
}
sleep
Запуск этого кода с crystal run
и отправка SIGINT процессу, всегда будет .terminated?
возвращать true для процесса, потому что он находится всостояние зомби (<defunct>
).