ドッカーコンテナ(ubuntu 14.04ベース)内でkarmaを使ってJavaScriptユニットテストを行うには、karma-script-launcherをxvfb-run
としてコンテナ内で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
ブラウザを起動して単体テストを実行するとうまくいきます。テストを実行した後、カルマはスポーンされたブラウザインスタンスを終了します。私の場合、xvfb-runでfirefoxを起動したスクリプトです。
上記のスクリプトでは、trap
を登録して、スクリプトの終了時に起動したfirefoxを強制終了することがわかりました。これは動作しますが、スクリプトによって起動された1つのインスタンスを終了するのではなく、現在実行中のすべてのインスタンスが終了するので、スクリプトは非常に良い市民ではありません。私は最初、私は手動でxvfb-run
上のFirefoxを起動した場合は生成されたプロセスの束がある...
をxfvb-run
プロセスを強制終了しようとしましたが、このプロセスを殺すことはxvfb-run
スクリプトによって起動されたサブプロセスには影響を与えません。
[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#
xvfb-run
プロセス(PID 348)を終了すると、このプロセスだけが終了し、他のプロセスは実行されます。代わりにfirefoxプロセス(PID 361)をkillすると、xvfb-run
スクリプトが正しく終了し、他のプロセスも強制終了します。しかし、私のスクリプトから、私は唯一のxvfb-run
プロセスのPIDを知っている...私の研究の間に
は、私はまだ2012年
に戻って固定beeingてバグの状態にもかかわらず有効であると思われるxvfb-run
ため
this rather old bug reportに出くわし
他のプロセスを正しくクリーンアップするために、xvfb-run
プロセスを終了させる丁寧な方法はありますか?