我在使用Ruby PTY gem时遇到问题。似乎在使用PTY生成进程后,它将与打开的设备文件/ dev / ptmx一起
示例:
require 'pty'
PTY.spawn('ls') do |r,w,pid|
Process.kill(9, pid)
Process.wait(pid)
end
对于上面的每个生成物,我都有:
ruby 72578 user 10u CHR 15,8 0t0 572 /dev/ptmx
ruby 72578 user 11u CHR 15,8 0t0 572 /dev/ptmx
当程序结束但我的服务器没有被设计为终止时,文件最终将关闭。
我认为使用“ PTY.spawn ... do”块将确保PTY清理所有内容。但是我错了。有终止PTY的适当方法吗?
答案 0 :(得分:1)
这似乎是spawn
的错误(或功能?)。如果您过早地杀死了基础进程,这似乎只会发生。
但是,通过关闭文件句柄可以轻松解决此问题。可以像这样透明地完成:
def PTY.spawn_safe(command, &block)
PTY.spawn(command) do |r,w,pid|
yield r,w,pid
w.close
r.close
end
end
# No more dangling file handles
PTY.spawn_safe('ls') do |r,w,pid|
Process.kill(9, pid)
Process.wait(pid)
end