首页 > 解决方案 > 如何使用 ProcessBuilder 运行和终止异步重定向

问题描述

我想将命令的输出重定向到文本文件,并且我想使用ProcessBuilder(在 Linux 或 Unix 上)运行命令。我希望重定向异步运行,并且我希望 Java 进程存储重定向命令的 pid,并在不再需要重定向时终止重定向进程。

我看到它ProcessBuilder.start()返回一个具有方法的Process对象Proccess.pid()。我还看到一种方法Process.waitFor()暗示重定向命令在通过运行时本质上是异步的Process Builder

所以我的问题是,我是否可以在异步进程中运行重定向命令,使用ProcessBuilder获取 PID Process,并通过省略全部终止正在运行的重定向进程Process.waitFor()?这完全有可能吗?

谢谢

标签: javalinuxunix

解决方案


是的,Process该类具有杀死正在运行的进程的方法destroy()destroyForcibly()从 Java 9 开始,ProcessHandle添加了该类,该类也具有相同名称的方法。

如果您有 pid 但没有该Process对象,则可以ProcessHandle使用该方法为给定其 pid 的正在运行的进程获取一个,ProcessHandle.of(long pid)但如果您Process自己启动它,则更容易使用从它Process返回的对象ProcessBuilder.start()或从中获取ProcessHandle使用Process.toHandle()方法。


推荐阅读