Javaを介してプロセスを実行および強制終了しているときに、奇妙な問題に直面しました。
基本的に、taskkillを使用して1つのプロセスを強制終了するメソッドがあります。
private static void kill() {
try {
Runtime.getRuntime().exec("taskkill /F /IM app.exe");
} catch (IOException e) {
e.printStackTrace();
}
}
このメソッドを呼び出して、新しいプロセスを開始する前にすべてのプロセスが強制終了されていることを確認します。
kill();
ProcessBuilder procBuilder = new ProcessBuilder(args);
try {
Process p = procBuilder.start();
} catch (Exception e) {
e.printStackTrace();
}
問題は、開始されたプロセスがタスクキルによって強制終了されたように見えることです。殺すという呼びかけがなければ、それは完全にうまく機能します。キルすると、プロセスは開始されますが、GUIは表示されません。
これは2つの呼び出し間の優先順位の問題ですか?(runtime.execの優先度はProcessBuilder.startよりも低くなりますか?)
Runtime execの戻り時にwaitForを使用して解決しましたが、なぜこの問題が発生したのか知りたいです。