如何使用Java暂停进程运行';s ProcessBuilder.start()?

如何使用Java暂停进程运行';s ProcessBuilder.start()?,java,process,exec,processbuilder,Java,Process,Exec,Processbuilder,好的,我正在编写这个程序,它基本上是为我批处理运行其他java程序(多次、可变参数、并行执行等) 到目前为止,运行部分工作得很好。它使用ProcessBuilder的.start()方法(我相信相当于Runtime.exec()),创建一个单独的java进程,然后关闭它 问题是,我希望能够在这些进程启动后暂停/停止它们。对于简单的线程,这通常很容易做到,但是外部进程似乎没有任何内置的等待/睡眠功能,至少从外部的角度来看不是这样 我的问题是:有没有办法暂停java.lang.Process对象?如

好的,我正在编写这个程序,它基本上是为我批处理运行其他java程序(多次、可变参数、并行执行等)

到目前为止,运行部分工作得很好。它使用ProcessBuilder的.start()方法(我相信相当于Runtime.exec()),创建一个单独的java进程,然后关闭它

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


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

进程表示在机器上运行的单独进程。Java绝对不允许您通过Java.lang.Process暂停它们。你可以强行阻止他们使用。对于暂停,您将需要派生进程的合作

这些是什么样的过程?是你写的吗

我的问题是:有没有办法暂停java.lang.Process对象?

正如您可能已经发现的那样,标准API中不支持这一点<例如,code>Process不提供任何
suspend()
/
resume()
方法

如果没有,是否有人知道包含此功能的任何相关exec库?

在符合POSIX标准的操作系统(如GNU/Linux或Mac OS)上,您可以使用另一个系统调用(使用
Runtime.exec
ProcessBuilder
或一些本机实现的库)来发出
kill
命令

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


(您需要掌握外部程序的进程id。有大量的和周围的程序可以回答这个问题。)

您需要创建一个系统,用于在进程之间发送消息。您可以通过以下方式实现此目的:

  • 发送,取决于操作系统。(如aioobe所述。)
  • 让一个进程偶尔检查是否存在另一个进程可以创建/删除的文件。(如果正在读取/写入文件,则需要使用文件锁定。)
  • 让你的“主”进程监听一个端口,当它启动孩子们时,它会告诉他们(通过comamnd line参数)如何在孩子们启动时“打电话回家”。这两个程序交替进行工作和检查消息处理
  • 根据您所描述的(复杂批处理环境中的所有Java程序),我建议#3,TCP/IP通信


    虽然它当然需要额外的工作,但它也让您能够灵活地在不同的进程之间发送任何类型的命令或信息。

    任何特定的操作系统?我不知道它是否适合您想要做的事情,但我最近开始阅读一些可能值得一看的内容,这些过程是在java中运行的处理器密集型研究实验(exec命令是“java-jar实验args”)。他们可以100%使用单个核心,有时长达一个小时。我自己写的,但设计的概念是它们是无意识的单核线程无知的有效负载。我更愿意修改Process类,而不是让实验轮询暂停信号。我喜欢这个想法,但这台机器要运行的是windows,我确实喜欢争取平台独立性(尽管现在我愿意接受windows解决方案)。