Ruby:杀死产生的子进程的正确方法

时间:2018-07-24 23:59:05

标签: ruby process kill zombie-process

我正在编写一个生成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会话自然终止,就不会有僵尸。实际上,这是无法保证的。我该怎么做才能适当地杀死这样的子进程?

0 个答案:

没有答案