在我的程序中,我调用一个 Linux 进程,读取该进程的输出,对其进行处理,然后 hibernate 直到下一次迭代。我遇到的问题是我调用的进程并不总是终止,即使当我执行 childProcess.destroy()
时也是如此。这是代码:
while(true) {
Process childProcess = Runtime.getRuntime().exec("./getData");
InputStream input = childProcess.getInputStream();
BufferedReader inPipe = new BufferedReader(new InputStreamReader(input));
while((lineRead = inPipe.readLine()) != null) {
// do stuff
}
childProcess.destroy();
inPipe.close();
input.close();
}
绝大多数情况下,./getData 运行、正常退出并且我的程序正常运行。但是....有时它不会退出,只是坐在那里消耗 CPU。我需要一种杀死它的方法。我也尝试在调用它之前添加它,但这没有用:
Process killGetData = Runtime.getRuntime().exec("pkill -9 getData");
killGetData.destroy();
我猜我可能陷入了内部 while() 循环。
感谢收到的任何想法、想法和提示。非常感谢
约翰
最佳答案
您必须关闭到子进程的输入管道以终止它。添加
childProcess.getOutputStream().close();
(它是父进程的输出流,但是子进程的输入)。
[编辑] 另外不要忘记调用 childProcess.waitFor()
来清理僵尸进程。
关于java - 杀死在 Java 中调用的子进程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931231/