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プロセスは残っている
対処方法
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