Рубиновый безголовый watir-webdriver Xvfb зомби

У меня есть два приложения, работающих на одном сервере, которые выполняют задачи автономного просмотра. Каждый раз, когда вы просматриваете, процесс Xvfb не умирает, а вместо этого становится зомби. Я могу подтвердить это с помощью следующего скрипта.

require 'headless'
require 'watir-webdriver'
require 'yaml'

zombies_at_start = `ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'`.split("\n").count

5.times do
  begin
    d = YAML.load_file("/path/to/config/headless.yml")['build_number'] #=> "98"
    h = Headless.new(:display => d) 
    h.start
    b = Watir::Browser.new :firefox
    b.goto 'http://google.com'
    sleep(0.5)
  ensure
    b.close
    h.destroy
  end
  sleep(0.5)
end

zombies_at_end = `ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'`.split("\n").count

puts "Created #{zombies_at_end - zombies_at_start} more zombies." 
#=> Created 5 more zombies.

Почему? Как я могу это исправить?


Информация о версии:

  • xorg-x11-сервер-Xvfb-1.15.0-26.el6.centos.i686
  • Выпуск CentOS 6.5 (финальный)
  • рубин-2.0.0-p353
  • рвм 1.25.25
  • селен-вебдрайвер (2.45.0, 2.44.0)
  • ватир-вебдрайвер (0.7.0)
  • безголовый (2.1.0)

person Sam    schedule 10.06.2015    source источник


Ответы (1)


ОБНОВЛЕНИЕ: запрос на вытягивание отправлен в Headless для ожидания по умолчанию было принято. Ву!


Безголовый гем изменил способ запуска, остановки (уничтожения) и проверки процесса Xvfb. Хотя я не совсем уверен, почему, но в CentOS 6 это приводит к зомбированию процесса. Поскольку .destroy ранее не вызывал проблем, это должно быть связано с тем, как безголовый запускает процесс Xvfb (который был переписан одновременно).

Однако гем одновременно представил .destroy_sync, который ждет смерти процесса, а не создает зомби.

require 'headless'
require 'watir-webdriver'
require 'yaml'

zombies_at_start = `ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'`.split("\n").count

5.times do
  begin
    d = YAML.load_file("/path/to/config/headless.yml")['build_number'] #=> "98"
    h = Headless.new(:display => d) 
    h.start
    b = Watir::Browser.new :firefox
    b.goto 'http://google.com'
    sleep(0.5)
  ensure
    b.close
    # h.destroy
    h.destroy_sync
  end
  sleep(0.5)
end

zombies_at_end = `ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'`.split("\n").count

puts "Created #{zombies_at_end - zombies_at_start} more zombies." 
#=> Created 0 more zombies.
person Sam    schedule 23.06.2015