3

在我的程序中,我调用一个 Linux 进程,读取该进程的输出,处理它,然后休眠直到下一次迭代。我遇到的问题是我调用的进程并不总是死掉,即使我执行了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() 循环。

任何想法,想法和提示都非常感激。提前谢谢了

约翰

4

1 回答 1

1

您必须关闭子进程的输入管道才能终止它。添加

childProcess.getOutputStream().close();

(它是父进程的输出流,但子进程的输入)。

[编辑] 另外不要忘记调用childProcess.waitFor()清理僵尸进程。

于 2010-10-14T08:20:23.730 回答