gpt4 book ai didi

bash - 如何正确终止 xvfb-run

转载 作者:行者123 更新时间:2023-11-29 09:06:03 27 4
gpt4 key购买 nike

为了使用 karma 执行一些 JavaScript 单元测试在 docker 容器内(基于 ubuntu 14.04)我在容器中使用 karma-script-launcher 启动 firefox使用 xvfb-run。启动脚本如下所示:

#!/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 的脚本。

在上面的脚本中,您可以看到我注册了一个 trap 以在脚本退出时终止已启动的 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-run 进程的 PID...

在我的研究过程中,我偶然发现了 this rather old bug report对于 xvfb-run 这似乎仍然有效,尽管该错误的状态已在 2012 年修复。

是否有礼貌的方式终止 xvfb-run 进程,以便正确清理其他进程?

最佳答案

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

Howto terminate xvfb-run properly @ Unix & Linux

然而,正确终止 X 程序的唯一选择似乎是不使用 xvfb-run 并编写您自己的脚本以使用 Xvfb 启动进程。

关于bash - 如何正确终止 xvfb-run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37481482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com