Linux僵尸进程没有被Java ProcessBuilder终止

问题描述

我有一个带有控制器的Java Spring REST API,该控制器运行带有ProcessBuilder类的linux命令

。该命令是生成的“查找”命令

问题是使用几天后,我在托管服务器中发现了许多未终止的进程。我不知道他们为什么还在那里而没有终结或被摧毁。 (我用ps -ef命令检查了

这是我的runCmd函数:


public static final BufferedReader runCmd(String cmd) throws IOException,InterruptedException {
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("bash","-c",cmd);

        processBuilder.redirectErrorStream(true);
        Process process = processBuilder.start();

        BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));

        int ret = process.waitFor();
        return output;
}

有没有办法确保不再剩下任何流程?

更新

问题仅来自具有非常大的输出流(标准输出)的命令。感谢提示@DuncG

由于此输出很重要,因此我不能忽略它。我必须找到一种消耗它的方法。

关于如何使用可运行线程的任何想法?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)