Как вы убиваете вызов PTY.spawn в Ruby? - PullRequest
3 голосов
/ 12 апреля 2010

Если я запускаю такую ​​команду, используя pty-класс ruby, как мне ее убить, если я найду определенную входную строку?

cmd = "appcfg.py update cdn"
PTY.spawn("#{cmd} 2>&1") do | input, output, pid |
  begin
    input.expect("Email:") do
      output.write("#{credentials[:username]}\n")
    end
    input.expect("Password:") do
      output.write("#{credentials[:password]}\n")
    end
    if input.gets == "SOMETHING"
      EXIT!
    end
  rescue Exception => e
    puts "GAE Error..."
  end
end

Как правильно это сделать?

1 Ответ

1 голос
/ 12 апреля 2010

Как насчет этого?

processes =  %x[ps -A].split("\n")
processes.each do |p|
  if p.include?('ruby1.9')
    pid = p.split(' ')
    %x[kill #{pid[0].to_i}]
  end
end

Это конечно, если вы запускаете ruby1.9 (и это убьет ВСЕ процессы ruby1.9! (Поэтому, если вы запускаете на своем сервере какую-либо другую программу ruby ​​или что-то еще, вам нужно будет выполнить оператор if, чтобы проверить, какой процесс это так.

...