gpt4 book ai didi

java - Linux 从 Java 控制台应用程序中杀死 Java 进程

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:18 24 4
gpt4 key购买 nike

我正在尝试使用 .jar 文件的名称终止已经运行的 java 进程。

运行命令时完全正常

pkill -9 -f myapp.jar

来自终端,但当您在 ​​ProcessBuilder 中运行相同的命令时它不起作用。

BufferedReader killStream;
String line;

try{
String[] args = new String[] {"pkill", "-9", "-f", " myapp.jar"};
Process proc = new ProcessBuilder(args).start();
killStream = new BufferedReader(new InputStreamReader(proc.getInputStream()));
line = killStream.readLine();

System.out.println(line);

return true;
}catch(Exception e){

e.printStackTrace();
return false;

}

killStream 总是返回'null'

我做错了什么?

最佳答案

除了上面提到的参数传递之外,这里还有一些遗漏的地方,您的代码可以做更多的改进。

首先,为什么不使用 try with resources 子句来确保您的资源自动管理并始终正确关闭?

考虑到这一点,您的代码将如下所示:

try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
// code to parse the command's output.
} catch (IOException e) {
// code to handle exceptions
}

其次,使用当前代码,即使 pkill 命令未正确运行,您的方法也将始终返回 true。

理想情况下应该使用 Process#waitFor 等待进程终止,然后调用 Process#exitValue 来检索命令的退出状态。然后,您应该根据退出代码是 0 还是其他任何值返回 true 或 false。

最后,为了提高效率,我建议使用 StringBuilder 来收集和附加所有进程的输出行,然后只打印出该字符串。

请注意,有更好的方法来封装所有这些过程,使其更通用和可重用,同时还使用 Java 8+ API(如流、消费者等)。

关于java - Linux 从 Java 控制台应用程序中杀死 Java 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51927901/

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