Вы не можете (хотя бы с общим флагом на Thread
). Это отдельный процесс, который вы начали в потоке. Умирающий поток не останавливает процесс.
Вы должны сохранить pid процесса и явно прекратить его:
Thread.report_on_exception = false
Thread.abort_on_exception = true
pids = []
at_exit do
pids.each do |pid|
`kill -9 #{pid}`
end
end
Thread.new do
pids.push Process.spawn('for((i=0; ;++i)); do echo "$i"; sleep 1; done')
end
sleep 5
raise 'Failure'
Вывод:
0
1
2
3
4
Traceback (most recent call last):
test.rb:17:in `<main>': Failure (RuntimeError)
Само собой разумеется, не используйте этот код как в производстве.