Um einige JavaScript Unit-Tests mit in einem Docker-Container (basierend auf Ubuntu 14.04) durchzuführen, starte ich Firefox im Container mit einem karma-script-launcher mit xvfb-run
. Das Startskript sieht so aus:Howto terminieren xvfb-run richtig
#!/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
Starten des Browsers und Ausführen der Komponententests funktioniert sehr gut. Nach dem Ausführen der Tests beendet Karma die erstellte Browser-Instanz - in meinem Fall das Skript, das Firefox über xvfb-run gestartet hat.
In dem obigen Skript können Sie sehen, dass ich ein trap
registriert, um die gestartete Firefox beim Beenden meines Skripts zu töten. Das funktioniert, aber das Skript ist kein sehr netter Bürger, da es alle Instanzen von Firefox, die gerade ausgeführt werden, beendet anstatt nur die eine Instanz zu beenden, die vom Skript gestartet wurde. Ich versuchte zunächst, den xfvb-run
Prozess zu töten, aber diesen Prozess zu töten hat keine Auswirkungen auf den Teilprozess durch das Skript xvfb-run
gestartet ...
Wenn ich firefox über xvfb-run
manuell starten, gibt es eine Reihe von gelaicht Prozesse:
[email protected]:/data# xvfb-run --auto-servernum --server-args='-screen 0, 1024x768x16' firefox &
[1] 348
[email protected]:/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
[email protected]:/data#
Wenn ich jetzt den Prozess xvfb-run
(PID 348) abbricht, wird nur dieser Prozess beendet, so dass die anderen Prozesse ausgeführt werden. Wenn ich stattdessen den Firefox-Prozess (PID 361) abbringe, beendet das Skript xvfb-run
die anderen Prozesse ebenfalls ordnungsgemäß und beendet sie. Aber von meinem Skript weiß, dass ich nur die PID des xvfb-run
Prozess ...
Während meiner Forschung, die ich für xvfb-run
über this rather old bug report gestolpert, die noch trotz des Status gültig zu sein scheint der Fehler behoben beeing im Jahr 2012 zurück
Gibt es eine höfliche Möglichkeit, den Prozess xvfb-run
zu beenden, damit die anderen Prozesse ordnungsgemäß bereinigt werden?