Sample Header Ad - 728x90

Howto terminate xvfb-run properly

8 votes
3 answers
27124 views
In order to perform some JavaScript unit tests with karma inside a docker container (based on ubuntu 14.04) I'm starting firefox in the container using a karma-script-launcher with xvfb-run. The start script looks like this: #!/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 Starting the browser and executing the unit tests works very well. After executing the tests karma terminates the spawned browser instance - in my case the script that launched firefox over xvfb-run. In the above script you can see that I registered a trap to kill the launched firefox on exit of my script. This works, but the script is not a very nice citizen as it terminates **all** instances of firefox that are currently running instead of just terminating the one instance that was launched by the script. I first tried to kill the xfvb-run process but killing this process has no effect on the sub-process launched by the xvfb-run script... If I start firefox over xvfb-run manually there is a bunch of spawned processes: 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# If I now kill the xvfb-run process (PID 348), only this process will be terminated, leaving the other processes running. If I kill the firefox process (PID 361) instead, the xvfb-run script correctly terminates and kills the other processes as well. But from my script I only know the PID of the xvfb-run process... During my research I stumbled across this rather old bug report for xvfb-run which still seems to be valid in spite of the bug's status beeing fixed back in 2012. Is there any polite way to terminate the xvfb-run process in order for the other processes to be cleaned up correctly? --- I already asked this on Stack Overflow, but got no answer till now. Perhaps it's somewhat OT for Stack Overflow but better located here?!
Asked by dpr (423 rep)
Jun 24, 2016, 09:23 AM
Last activity: Nov 4, 2021, 08:03 PM