java - 如何使用 ProcessBuilder 运行和终止异步重定向
问题描述
我想将命令的输出重定向到文本文件,并且我想使用ProcessBuilder(在 Linux 或 Unix 上)运行命令。我希望重定向异步运行,并且我希望 Java 进程存储重定向命令的 pid,并在不再需要重定向时终止重定向进程。
我看到它ProcessBuilder.start()
返回一个具有方法的Process对象Proccess.pid()
。我还看到一种方法Process.waitFor()
暗示重定向命令在通过运行时本质上是异步的Process Builder
。
所以我的问题是,我是否可以在异步进程中运行重定向命令,使用ProcessBuilder
获取 PID Process
,并通过省略全部终止正在运行的重定向进程Process.waitFor()
?这完全有可能吗?
谢谢
解决方案
是的,Process
该类具有杀死正在运行的进程的方法destroy()
。destroyForcibly()
从 Java 9 开始,ProcessHandle
添加了该类,该类也具有相同名称的方法。
如果您有 pid 但没有该Process
对象,则可以ProcessHandle
使用该方法为给定其 pid 的正在运行的进程获取一个,ProcessHandle.of(long pid)
但如果您Process
自己启动它,则更容易使用从它Process
返回的对象ProcessBuilder.start()
或从中获取ProcessHandle
使用Process.toHandle()
方法。
推荐阅读
- python - Django - 如何删除数据库中的对象?
- maven - 运行 mvn compile 时出现 401 Unauthorized
- reactjs - 未找到规则“简单导入排序/排序”的定义 simple-import-sort/sort
- c# - 使用类/构造函数保存数据时无法在 C# 应用程序中保存到列表/字典
- java - 数组类型的组件类型什么时候也是数组类型?
- laravel - Laravel:在 where 子句中使用“LIKE”
- flutter - 使用 Custom Painter 在 Flutter 中掩盖路径和绘画
- flutter - 滚动控制器出错
- ruby-on-rails - 带有 Devise Token Auth 未初始化常量用户的 Rails
- ios - .png 文件在 Xcode 中以黑色背景加载