2016-05-27 54 views
2

ドッカーコンテナ(ubuntu 14.04ベース)内でkarmaを使ってJavaScriptユニットテストを行うには、karma-script-launcherxvfb-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プロセスを終了させる丁寧な方法はありますか?

答えて

0

私は、これは一般的なプログラミングよりもUNIX/Linuxのに対して、より関連していると、ここで多くの注目を集めることはなかったとして、いくつかの時間前にunix.stackexchange.comに、この質問を投稿:

Howto terminate xvfb-run properly @ Unix & Linux

しかし、 Xプログラムを終了するための唯一のオプションは、xvfb-runを使用せず、Xvfbでプロセスを開始する独自のスクリプトを書くことです。

関連する問題