読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

PhantomJsのプロセスが残り続ける問題と対処方法

環境

Windows10
cygwin
phantomjs2.1.1

事象

Windows環境でPhantomJsのテストを行っててPhantomJsDriverログを削除しようとした所、他プロセスが利用してるので削除できないというエラーが発生。
ちなみにJavaプロセスは存在していない事を確認済み。

$ rm phantomjsdriver.log 
rm: `phantomjsdriver.log' を削除できません: Device or resource busy

原因

プログラムの異常終了によりPhantomJsが閉じられないままPhantomJsのプロセスが残っていた事が原因。
以下参考

PhantomJSDriverインスタンス生成時にPhantomJsプロセスが生成される

PhantomJSDriver driver = new PhantomJSDriver(capabilities);
$ ps -efW | grep phantom
       0   14268       0 ?        09:25:46 C:\phantomjs-2.1.1\bin\phantomjs.exe

quitメソッド実行でプロセスは削除される

            driver.quit();

quitメソッドが呼ばれる前に異常終了等でプログラムが終了するとJavaプロセスは消えてもPhantomJsプロセスは残っている

対処方法

cygwinからWindowsのプロセスを確認して削除

PhantomJsのプロセスを確認
cygwinでは-Wオプションを指定する事でWindowsプロセスが確認できる。

$ ps -efW | grep phantom
       0    4880       0 ?        14:09:38 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0    8960       0 ?        14:09:47 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0    9296       0 ?        14:13:17 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0   10096       0 ?        14:14:31 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0   15000       0 ?        14:17:23 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0    7776       0 ?        14:17:34 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0   12448       0 ?        14:19:06 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0    9044       0 ?        14:21:16 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0   14852       0 ?        08:37:40 C:\phantomjs-2.1.1\bin\phantomjs.exe
       0    6928       0 ?        08:53:34 C:\phantomjs-2.1.1\bin\phantomjs.exe

通常のkillコマンドだとプロセスが見つかりませんって出るので
以下のコマンドでPhantomJsプロセスをkill
※最後の/Fはkillの-9に該当するらしい。

$ cmd /c taskkill.exe /pid 4880 /F