java - 如何使用Java的ProcessBuilder.start()暂停进程运行?

标签 java process exec processbuilder

好吧,所以我正在编写这个程序,它本质上是为我批量运行其他 java 程序(多次、改变参数、并行执行等)。

到目前为止,运行部分运行良好。使用 ProcessBuilder 的 .start() 方法(我相信相当于 Runtime.exec()),它创建一个单独的 java 进程并开始运行。

问题是我希望能够在这些进程启动后暂停/停止它们。对于简单的线程,这通常很容易做到,但是外部进程似乎没有任何内置的等待/ sleep 功能,至少从外部的角度来看是这样。

我的问题是:有没有办法暂停 java.lang.Process 对象?如果没有,有人知道任何包含此功能的相关执行库吗?除此之外,扩展 Process 是一个更可行的选择吗?

最佳答案

My question(s) is this: Is there a way to pause a java.lang.Process object?

您可能已经发现,标准 API 中不支持此功能。例如,Process 不提供 suspend()/resume() 方法。

If not, does anyone know of any related exec libraries that do contain this ability?

在 POSIX 兼容操作系统(例如 GNU/Linux 或 Mac OS)上,您可以使用另一个系统调用(使用 Runtime.execProcessBuilder 或某些 native 实现的库)来发出 kill 命令。

使用kill命令,您可以发送诸如SIGSTOP(暂停进程)和SIGCONT(恢复进程)之类的信号。

(您需要获取外部程序的进程 ID。有很多 questionsanswers 可以回答这个问题。)

关于java - 如何使用Java的ProcessBuilder.start()暂停进程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207417/

相关文章:

Java Runtime.getRuntime().exec() 似乎正在覆盖 $PATH

android - 将 Control-C 发送到通过 Runtime.getRuntime().exec ("su"运行的进程;

java - Oracle 数据库可以向 Servlet 发送请求吗?

java - jenkins 插件可以使用与主要 jenkins webapp 不同版本的 jar 吗?

c# - 获取 C# 中实际可见的进程/窗口

php - 检查 "exec"是否被禁用

java - 无法解析 TabHost 方法上的符号 android

java - Spring Boot 应用程序和 MessageSource

c - 在 execlp 调用期间休眠以避免输出 'lag'?是否可以?

c# - 打开进程(记事本)后如何将焦点设置回表单?