如何停止使用其他 Java 程序运行的程序

2023-12-03

我一直在实现一个程序来编译和运行其他应用程序。我想知道当我的应用程序发现存在问题时是否有办法终止程序,例如无限循环。我尝试使用 process.Destroy() 但它杀死了 CMD,而不是具有无限循环的实际程序...

非常感谢您的帮助。

这是我的代码的一部分:

    synchronized (pro) {
          pro.wait(30000);
    }

    try{
        pro.exitValue();

        }catch (IllegalThreadStateException ex)
        {

            pro.destroy();
            timeLimitExceededflag = true;
            System.out.println("NOT FINISHED123");
            System.exit(0);


        }

    }

基本上我正在让我的应用程序使用 processBuilder 调用 cmd。此代码终止 CMD,但如果它运行一个具有无限循环的程序,则该应用程序仍将运行,这会影响我的服务器性能。


我建议使用以下解决方案:

  1. 以指定的标题启动您的程序
  2. 使用“tasklist”命令获取进程的 PID。需要 CSV 解析器。我相信有大量可用的,例如 org.apache.commons.csv.CSVParser 等:)
  3. 使用 PID 通过“taskkill”命令终止进程。

这是可能有用的代码的一部分:

public static final String          NL = System.getProperty("line.separator", "\n");

public <T extends Appendable> int command(String... cmd) throws Exception {
    return command(null, cmd);
}

public <T extends Appendable> int command(T out, String... cmd) throws Exception {
    try {

        final ProcessBuilder pb = new ProcessBuilder(cmd);

        pb.redirectErrorStream(true);

        final Process proc = pb.start();
        final BufferedReader rd = new BufferedReader(new InputStreamReader(proc.getInputStream()));

        for (;;) {
            final String line = rd.readLine();

            if (line == null) {
                break;
            }

            if (out != null) {
                out.append(line);
                out.append(NL);
            }
        }

        return proc.waitFor();

    } catch (InterruptedException e) {
        throw new IOException(e);
    }
} 

public void startProcessWithTitle(String pathToExe, String title) throws Exception {
    command("cmd.exe", "/C", "start", '"' + pathToExe + '"', '"' + title + '"', ..cmd.params..);
}

public int findProcessByTitle(String title) throws Exception {

    final StringBuilder list = new StringBuilder();

    if (command(list, "tasklist", "/V", "/FO", "csv") != 0) {
        throw new RuntimeException("Cannot get tasklist. " + list.toString());
    }

    final CSVReader csv = new CSVReader(new StringReader(list.toString()), ',', true, "WindowsOS.findProcessByTitle");
    csv.readHeaders(true); // headers

    int pidIndex = csv.getHeaderIndex("PID");
    int titleIndex = csv.getHeaderIndex("Window Title");

    while (csv.nextLine()) {
        final String ttl = csv.getString(titleIndex, true);
        if (ttl.contains(title)) {
            return csv.getInt(pidIndex);                
        }
    }

    Utils.close(csv);

    return -1;
}

public boolean killProcess(int pid) throws Exception {
    return command("taskkill", "/T", "/F", "/PID", Integer.toString(pid)) == 0;
}    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何停止使用其他 Java 程序运行的程序 的相关文章

随机推荐

  • 从文本文件中解析唯一单词

    我正在开发一个项目 从大量文本文件中解析出唯一的单词 我已经完成了文件处理 但我正在尝试改进解析过程 每个文件都有一个特定的文本段 以我在实时系统上使用正则表达式捕获的某些短语结尾 解析器应该遍历每一行 并根据 3 个标准检查每个单词 长度
  • 如何在 Android 锁屏界面提示用户输入 PIN 码?

    Android 屏幕锁定 解锁编程 and 如何以编程方式锁定 解锁手机 Android 我已经搜索了许多问题的答案 但我没有得到适合我的用法的确切答案 我想在锁定屏幕默认系统锁定屏幕中获取输入凭据或输入密码页面 当我们说 Ok Googl
  • 使背景图像响应 - fullpage.js

    我在用fullpage js用于视差滚动 可以制作背景图吗responsive在大自然中 当我re size my window https github com alvarotrigo fullPage js 下面是我正在使用的示例 ht
  • 为什么 SQL Server 2008 在使用 GROUP BY 时会进行排序并且未指定顺序?

    我遇到了一个非常奇怪的问题 我还没有找到解释 使用 SQL Server 2008 并使用 GROUP BY 它可以对我的列进行排序 而无需指定任何 ORDER BY 这是演示这种情况的脚本 CREATE TABLE Values Fiel
  • 使用 INNER JOIN 从 SQL 转换 UPDATE 以在 MySQL 中使用

    我想在 MySQL 中为我们转换这个 UPDATE product SET price 12 95 FROM product INNER JOIN product to category ON product product id prod
  • 将长日期字符串转换为 R 中的日期

    我有一个日期变量 其格式为 25 APR 2013 03 05 03 000000000 PM 我已将其转换为字符并尝试将其格式化 我确实使用了 as Date 的帮助文档 但它对我没有帮助 我正在尝试找到一种解决方案 将其转换为标准 Y
  • 将列中的类别提取到具有新类别的重复行中

    我有一个看起来像这样的表 Group Name Comment Tag 1 Tag 2 Tag 3 gr1 Joe We are SYSTEM SUGGESTION PAINPOINT gr1 Joe I want PROCESS ATTI
  • Facebook sharer.php 端点不再被弃用吗?

    Facebook sharer php 端点不再被弃用吗 我做了很多挖掘和研究 我们是否仍然可以使用 Facebook 共享对话框 URL 进行共享 http www facebook com sharer sharer php u URL
  • Windows 性能计数器从 PerfMon 中消失

    我对此感到完全困惑 TM 在 Win7SP1 64 位机器上 PerfMon似乎完全否认已安装的自定义性能计数器的知识 我正在使用一个现有的代码库 该代码库在生产机器上完美地安装了计数器 但是当我在我的机器上运行它时 当我使用我添加的计数器
  • Function/OnTap 中的 AlertDialog 设置状态

    新来扑腾 我知道如何设置警报对话框的状态 但需要点击才能实现 gt createPlayer 等功能 它不想重建警报对话框 我想知道当您需要点击警报对话框时如何设置它们的状态 File image GestureDetector onTap
  • MySQL 结合 COUNT、MAX 和 SUM

    在 MySQL 中 我想要一个额外的列来显示特定列的值的总和 但是 我想要求和的数字来自子查询 并且不存储在单独的表中 如下所示 SELECT a ID MAX a COUNT ID AS MAX COUNT FROM SELECT ID
  • Crypto++ 在两个不同的 C++ 程序中加密和解密

    我正在编写一个使用 crypto 库进行加密和解密的代码 我找到了一个用于加密和解密的代码 如下所示 该代码作为一个程序可以正常工作 但是当我分成两个 C 程序时 一个用于加密 另一个用于解密 解密程序给我错误 terminate call
  • 使用 JSFL AS3 CS5.5 访问子/嵌套影片剪辑

    如何在 jsfl 中访问影片剪辑的子级 特别是子级影片剪辑 我已经处于实例级别 flash documents 0 timelines 0 layers 0 frames 0 elements 0 instance 我发现了本文档但仅此而已
  • 性能:Python pandas DataFrame.to_csv 追加逐渐变慢

    最初的问题 我正在循环访问数千个带有 Python Pandas DataFrame 的 pickle 文件 这些文件的行数不同 大约 600 到 1300 之间 但列数不同 确切地说是 636 然后我对它们进行转换 每个转换完全相同 并使
  • 检测用户是否打开或关闭 Wifi 或蓝牙 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我们如何使用 Swift 语言确定蓝牙或 Wifi 是否打开 关闭 我的应用程序使用蓝牙或 Wifi 与其他设备进行通信 我们对这些通信没有任何问题 但我们想通知用户 Wifi 和 或
  • 我可以在 WinDbg 中禁用“无法读取动态函数表条目”消息吗?

    我正在使用一个在运行时生成大量代码的程序 并且似乎不会为其生成任何展开数据 我没有这个程序的源代码 我正在为其编写一个插件 当程序挂起时 我使用 WinDbg 闯入它 并尝试使用以下命令获取所有线程的堆栈跟踪 k 除了堆栈跟踪之外 我还沿着
  • RegOpenKeyEx 给出错误 2 或错误 161,两种方式均失败

    我正在尝试从 Windows 服务器读取注册表项 但似乎无法使其在带或不带前导斜杠的情况下工作 如果我尝试 lError RegOpenKeyEx HKEY LOCAL MACHINE SOFTWARE Company Product Se
  • 在java中创建一个用于中断的倒数计时器

    我正在尝试为我正在编写的拼图应用程序实现基于计时器的评分系统 有人可以为我提供一个在 swing 中创建 JLabel 或面板的示例案例 其中包含一个可见的计数计时器 从 0 开始以秒为单位 该计时器在从方法调用时停止 并返回它的值 例子
  • 从包含 nsdictionary 的 nsmutablearray 中删除重复项

    我想从 nsmutablearray 中删除重复项 数组结构 act end date act entry date 13 11 2014 act recurrrance type Daily act start date 2014 11
  • 如何停止使用其他 Java 程序运行的程序

    我一直在实现一个程序来编译和运行其他应用程序 我想知道当我的应用程序发现存在问题时是否有办法终止程序 例如无限循环 我尝试使用 process Destroy 但它杀死了 CMD 而不是具有无限循环的实际程序 非常感谢您的帮助 这是我的代码