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
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 &  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
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?!