我正在编写一个生成SSH会话的程序。但是有时候出问题了,我不得不终止会议。但是这样做会让我陷入僵尸进程。这是一个简化的示例:
require 'pty'
PTY.spawn('ssh 8.8.8.8') do |r,w,pid|
Process.kill(9, pid)
end
(实际上,我并不是立即终止该进程)
如果我在irb中运行以上命令,我将最终死于僵尸:
501 58593 58219 0 4:50PM ?? 0:00.00 (ssh)
501 58219 57436 0 4:48PM ttys007 0:00.16 irb
如果我离开irb,僵尸就会消失。如果SSH会话自然终止,就不会有僵尸。实际上,这是无法保证的。我该怎么做才能适当地杀死这样的子进程?