如何在gnome-terminal中等待进程运行> 3.8

时间:2014-11-03 15:16:28

标签: ruby gnome-terminal waitpid

GNOME开发人员在大约3.8版本中从 gnome-terminal 中删除了选项disable-factory。在 wheezy 中有旧版本,在 jessie 中有3.14。

当使用该选项时 gnome-terminal (< 3.8)等待,直到运行它的东西结束。在较新版本中, gnome-terminal 会在窗口启动后立即返回。更糟糕的是,在窗口中运行的进程将主要的gnome-terminal进程作为父进程,因此我不能waitpid为它(因为这仅保留给子进程)。

我有一个Ruby脚本,它在gnome-terminal中启动一个工具,必须等到该工具的进程结束。任何人都知道如何实现这一目标,而不会在给定PID的循环检查状态上消耗太多资源?

必须可以在Ruby或Bash中完成。

1 个答案:

答案 0 :(得分:0)

看看sys-proctable宝石,它可能就是你所需要的。

(524)⚡️ irb
2.1.2 :001 > require 'sys/proctable'
 => true 
2.1.2 :002 > s = Sys::ProcTable.ps(88964)
 => #<struct Struct::ProcTableStruct pid=88964, ppid=88962, pgid=88964 ...> 
2.1.2 :003 > s.comm
 => "bash"
2.1.2 :004 > s.state
 => "run" 

之后它应该像循环一样简单:

loop do
  s = Sys::ProcTable.ps(88964)
  break if s.nil? || s.state != 'run'
  sleep(1)
end