Как дождаться запуска процесса в 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