Как дождаться запуска процесса в gnome-терминале> 3.8

GNOME разработчики убрали опцию disable-factory из gnome-терминала примерно в версии 3.8. В то время как в Wheezy есть более старая версия, в Джесси есть 3,14.

Когда эта опция использовалась, gnome-терминал (<3.8) оставался в ожидании, пока работающий с ним контент не закончился. В более новой версии gnome-терминал возвращается сразу после запуска окна. Что еще хуже, процесс, запущенный в окне, имеет основной процесс gnome-терминала в качестве родителя, поэтому я не могу waitpid для него (поскольку это зарезервировано только для дочерних процессов).

У меня есть скрипт Ruby, который запускает инструмент в gnome-терминал и должен ждать, пока процесс этого инструмента не закончится. У кого-нибудь есть идея, как этого добиться, не затрачивая слишком много ресурсов на цикл проверки статуса процесса с заданным PID?

Это должно быть возможно сделать в Ruby или Bash.

1 ответ

Посмотрите на 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
Другие вопросы по тегам