私はプロセスとスレッドに関する問題に直面しています。私のシナリオは次のとおりです。共有プロセス/スレッド
私のJavaアプリケーション、 'スターターアプリ' それを呼び出す、という名前
Thread
内ProcessBuilder
で別のEXEアプリケーション(Diagnosis.exe)を開始します。その後Thread startGXThread = new Thread(new Runnable() { @Override public void run() { try { ... File gxExe = new File(pathToGX); // Path to Diagnosis.exe gxp = pb.start(); gxp.waitFor(); } catch (IOException e) { LOG.error("Can't start module"); LOG.error(e.getMessage(), e); } catch (InterruptedException e) { LOG.debug("thread interrupted. Destroy process"); LOG.debug(e.getMessage(), e); if (gxp != null) { gxp.destroy(); LOG.debug("process exit value: " + gxp.exitValue()); } } } }, "diag_thrd");
桟橋webserver(ServiceWebApp)はwebappで起動します。
- クロムを開始し、 'Starter-App'は閉じたときに聴きます。
クロムが 'Starter-App'を閉じると、これを認識して桟橋を停止し、起動用アプリケーション.Diagnosis.exeも終了します。これはによって行われます
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { stopAsync(); } }); public static void stopAsync() { Thread diag = getThread("diag_thrd"); if (diag != null) { diag.interrupt(); } if (gxp != null) { gxp.destroy(); LOG.debug("process exit value: " + gxp.exitValue()); } }
質問:私はまだ/シャットダウン診断を破壊することができる一方で、Webアプリケーション内からstartet Diagnosis.exeを停止し、再度起動できるようにする必要があり 。 chromiumが 'Starter-App'内で停止するとexeになります。 私は自分の問題を説明し、示唆を得ることができれば幸いです。
したがって、Starter-AppはDiagnosis.exeとjettyサーバーとChromiumを起動しますか? – Sonata
そうです。 'Starter-App'はDiagnosis.exe、Jetty(デプロイされたWebアプリケーション)、Chromium(WebアプリケーションのURL)を起動します。 Chromiumが(ユーザーによって)終了すると、 'Starter-App'はこれを認識して、突堤とDiagnosis.exeをシャットダウンします。 – kism3t