如何在使用完Xvfb后关闭它

10

我正在使用Xvfb在无头firefox中运行一些测试。然而,在我的测试完成后,我想回到正常的显示模式。但是我做不到。以下是我的操作:

  1. 打开终端
  2. sudo Xvfb :10 -ac &
  3. export DISPLAY=:10
  4. 使用RobotFramework + Selenium执行我的测试

在第四步完成后,我想在同一个终端中打开firefox,但是我看不到它,因为它被定向到:10显示器。

我想知道如何关闭此(xvfb:10)以便我可以打开Firefox并查看它。


2
你尝试过在测试之前保存DISPLAY的值,然后在测试结束后将其设置回该值吗? - Bryan Oakley
1
运行得非常好,显然我存储了DISPLAY的默认值,将其设置为新值,运行测试,然后按照您的建议将DISPLAY重新设置为默认值。 - NODE.NODE
vmenezes提供的使用xvfb-run的答案更好。 它将导出DISPLAY变量并在完成后自动清理。
  1. 创建测试脚本
  2. chmod a+x脚本
  3. xvfb-run -s“-ac”./test_script
  4. 打开Firefox
- NeoH4x0r
2个回答

6

你第二个命令末尾的&告诉Linux将其作为后台进程运行。你可以使用$ jobs查看正在运行的后台进程列表。在Ubuntu16.04上进行示例:

$ sudo Xvfb :10 -ac &
[1] 31294
$ jobs -l
[1]+ 31294 Running                 sudo Xvfb :10 -ac &

如您在输出中所见,jobs -l显示了后台作业,输出的第二列是PID,可以使用$ sudo kill 31294命令将其终止。

另一个可能更“干净”的选项是启动Xvfb,只运行您想要的命令并自动退出,而不是让它在后台保持运行。 这样,您可以通过以下方式替换第2、3和4行:

xvfb-run python my_selenium_tests.py

只需将python my_selenium_tests.py替换为运行测试的任何方式。它将打开Xvfb并在结束时关闭。


xvfb-run是目前最好的选择——它运行命令并在命令终止后自动清理。但是,如果您需要使用此帧缓冲区运行多个命令,则可能需要创建脚本并使用xvfb-run来执行它——它将自动为子进程/ shell导出DISPLAY变量。 - NeoH4x0r

4
简单的解决方案是保留DISPLAY的旧值,将其更改为指向xvfb,然后在测试运行后可以将其更改回保存的值。
这样会使xvfb一直运行,因此您还需要获取该进程的pid并将其终止。否则,如果您多次运行这组步骤,就会在后台运行多个xvfb进程。

需要在执行xvfb后进行清理是有问题的,因为(1)你必须记得这样做,(2)你必须确保启动的进程已经完成。我认为vmenezes的答案应该被标记为被接受的答案,因为它解决了这两个问题。 - NeoH4x0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接