【问题标题】:How to run and kill an asynchronous redirect using ProcessBuilder如何使用 ProcessBuilder 运行和终止异步重定向
【发布时间】:2018-05-01 05:29:33
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: java linux unix


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多