gpt4 book ai didi

java - 共享进程/线程

转载 作者:行者123 更新时间:2023-11-29 04:36:28 27 4
gpt4 key购买 nike

我遇到了一个关于进程和线程的问题。我的场景是:

  • 我的 Java 应用程序,称之为“Starter-App”,在命名的 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");
  • 之后, jetty 网络服务器 (ServiceWebApp) 使用网络应用程序启动。

  • 启动 Chromium 并在关闭时收听“Starter-App”。
  • 一旦 chromium 关闭,'Starter-App' 就会识别并停止 jetty 并终止 startet application.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());
    }
    }

问题:我需要能够从 webapp 中停止 startet Diagnosis.exe 并再次启动它,同时一旦 chromium 在“Starter-App”中停止,仍然能够销毁/关闭 Diagnosis.exe。我希望我能解释我的问题并希望得到建议。

最佳答案

基于 Anands 的回答,我认为您需要在 Diagnosis.exe 和您的 Starter-App 之间使用某种形式的 IPC,使用 websockets 或许多其他选项,以获得一些想法:How to have 2 JVMs talk to one another .

Web 应用程序会向 Starter-App 发送重新启动 Diagnosis.exe 的请求,而 Starter-App 将始终负责管理应用程序三重奏。

关于java - 共享进程/线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com