bash – 如何正确终止xvfb-run
为了在docker容器中使用
karma执行一些JavaScript单元测试(基于ubuntu 14.04),我使用
karma-script-launcher和xvfb-run在容器中启动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-run启动firefox的脚本. 在上面的脚本中,您可以看到我在脚本退出时注册了一个陷阱来杀死已启动的firefox.这是有效的,但脚本不是一个非常好的公民,因为它终止当前正在运行的所有firefox实例,而不是仅仅终止脚本启动的一个实例.我首先试图杀死xfvb-run进程但是杀死这个进程对xvfb-run脚本启动的子进程没有影响… 如果我通过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 … 在我的研究期间,我偶然发现了this rather old bug report的xvfb-run,尽管这个bug的状态在2012年得到了修复,但它似乎仍然有效. 有没有礼貌的方法来终止xvfb运行进程,以便正确清理其他进程? 解决方法
我之前在unix.stackexchange.com上发布了这个问题,因为这与Unix / Linux的关系比一般编程更多,并没有引起太多关注:
Howto terminate xvfb-run properly @ Unix & Linux 然而,终止X程序correclty的唯一选择似乎是不使用xvfb-run并编写自己的脚本以使用Xvfb启动进程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |