gpt4 book ai didi

java - 使用 Java 中的 ProcessBuilder 调用的外部进程使用的内存和占用的时间

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:57 26 4
gpt4 key购买 nike

我在 stackoverflow 上搜索了这个问题,但没有得到任何有用的答案。我想获取 Java 中 ProcessBuilder 调用的外部进程所使用的内存和所花费的时间。如果进程超过时间限制/内存限制,那么我需要杀死它。

为了计算该过程所花费的时间,我使用以下代码:

   process = new ProcessBuilder(command).start();
starttTime = System.currentTimeMillis();
flag=false;
while (flag != true) {
try {
returnValue = process.exitValue();
flag = true;
if (returnValue != 0) {
System.out.println("Abnormal termination");
} else {
System.out.println("Normal termination");
}
System.out.println("Done");

} catch (IllegalThreadStateException e) {
}

currentTime = System.currentTimeMillis();
if (currentTime - startTime > timeLimitInMilli) {
System.out.println("process exceeding time limit");
break;
}

}

但是这种计算时间的方法比较慢。有没有更快的方法来做同样的事情。另外,我无法获取该进程使用的内存。我怎样才能得到它?

此外,该代码正被多个线程使用,这意味着不同的线程同时调用多个进程。

最佳答案

一种解决方案是运行包装脚本而不是直接运行命令。该脚本的目的是检查执行时间和内存使用情况(使用操作系统实用程序)并返回错误代码以指示任何问题。

或者,您可以使用 JNI 或其他特定于操作系统的命令来确定其他进程的内存使用情况。

如果另一个进程是 JVM 或其他将报告其内存使用情况的程序(例如,通过 MXBean),那么您的循环可以直接要求它报告内存使用情况。

关于java - 使用 Java 中的 ProcessBuilder 调用的外部进程使用的内存和占用的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344976/

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