【问题标题】:Ruby headless watir-webdriver Xvfb zombiesRuby 无头 watir-webdriver Xvfb 僵尸
【发布时间】:2015-06-10 11:00:29
【问题描述】:

我有两个应用程序在一个服务器上运行,它们执行无头浏览任务。每次浏览时,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-server-Xvfb-1.15.0-26.el6.centos.i686
  • CentOS 6.5 版(最终版)
  • ruby-2.0.0-p353
  • rvm 1.25.25
  • selenium-webdriver (2.45.0, 2.44.0)
  • watir-webdriver (0.7.0)
  • 无头 (2.1.0)

【问题讨论】:

    标签: ruby watir-webdriver centos6 headless xvfb


    【解决方案1】:

    更新:pull request 提交给 Headless 默认等待已被接受。哇!


    无头宝石changed the way it starts, stops (kills) and verifies the Xvfb process。虽然我不完全确定为什么,但在 CentOS 6 上这会导致进程僵尸化。由于.destroy 之前没有引起问题,因此它必须与 headless 启动 Xvfb 进程的方式(同时重写)有关。

    但是gem同时引入了.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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2013-05-30
      • 1970-01-01
      相关资源
      最近更新 更多