Bash 如何终止xvfb正常运行

Bash 如何终止xvfb正常运行,bash,xvfb,Bash,Xvfb,为了在docker容器(基于Ubuntu14.04)中执行一些JavaScript单元测试,我在容器中使用withxvfb运行启动firefox。开始脚本如下所示: #!/bin/bash set -o errexit # nasty workaround as xvfb-run doesn't cleanup properly... trap "pkill -f /usr/lib/firefox/firefox" EXIT xvfb-run --auto-servernum --serv

为了在docker容器(基于Ubuntu14.04)中执行一些JavaScript单元测试,我在容器中使用with
xvfb运行启动firefox。开始脚本如下所示:

#!/bin/bash
set -o errexit 

# nasty workaround as xvfb-run doesn't cleanup properly...
trap "pkill -f /usr/lib/firefox/firefox" EXIT

xvfb-run --auto-servernum --server-args='-screen 0, 1024x768x16' firefox $1
启动浏览器并执行单元测试非常有效。执行测试后,karma终止生成的浏览器实例——在我的例子中,是通过xvfb启动firefox的脚本

在上面的脚本中,您可以看到我注册了一个
陷阱
,在脚本退出时杀死启动的firefox。这是可行的,但是脚本不是一个很好的公民,因为它终止了当前运行的所有firefox实例,而不是仅仅终止脚本启动的一个实例。我首先尝试终止
xfvb运行
进程,但终止此进程对
xvfb运行
脚本启动的子进程没有任何影响

如果我在
xvfb run
上手动启动firefox,会产生一系列进程:

root@1d7a5988e521:/data# xvfb-run --auto-servernum --server-args='-screen 0, 1024x768x16' firefox &
[1] 348
root@1d7a5988e521:/data# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 bash
  348 ?        S      0:00 /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0, 1024x768x16 firefox
  360 ?        S      0:00 Xvfb :99 -screen 0, 1024x768x16 -nolisten tcp -auth /tmp/xvfb-run.bgMEuq/Xauthority
  361 ?        Sl     0:00 /usr/lib/firefox/firefox
  378 ?        S      0:00 dbus-launch --autolaunch bcf665e095759bae9fc1929b57455cad --binary-syntax --close-stderr
  379 ?        Ss     0:00 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
  388 ?        S      0:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
  414 ?        R+     0:00 ps ax
root@1d7a5988e521:/data#
如果我现在终止
xvfb run
进程(PID 348),那么只有这个进程将被终止,其他进程将继续运行。如果我杀死firefox进程(PID 361),那么
xvfb run
脚本将正确终止并杀死其他进程。但是从我的脚本中,我只知道
xvfb运行过程的PID

在我的研究过程中,我偶然发现了
xvfb run
,尽管该bug的状态早在2012年就已修复,但它似乎仍然有效


是否有任何礼貌的方法来终止
xvfb运行
进程,以便正确清理其他进程?

我不久前在unix.stackexchange.com上发布了这个问题,因为这与unix/Linux的关系比一般编程的关系更大,在这里没有引起太多注意:

但是,正确终止X程序的唯一选项似乎是不使用xvfb运行,并编写自己的脚本以使用xvfb启动进程