好吧,所以我正在编写这个程序,基本上批量运行其他java程序(多次,变化参数,并行执行等)。
到目前为止,运行部件运行良好。使用ProcessBuilder的.start()方法(相当于我相信的Runtime.exec()),它创建了一个单独的java进程,然后关闭它。
问题是我希望能够在这些进程启动后暂停/停止这些进程。使用简单的线程通常很容易做到,但外部进程似乎没有任何内置的等待/休眠功能,至少从外部角度来看是这样。
我的问题是:有没有办法暂停java.lang.Process对象?如果没有,是否有人知道任何包含此功能的相关exec库?除非所有这些,将Process扩展为更可行的替代方案?
答案 0 :(得分:3)
我的问题是:有没有办法暂停java.lang.Process对象?
正如您可能已经发现的那样,标准API中不支持此功能。例如,Process
不提供suspend()
/ resume()
方法。
如果没有,是否有人知道任何包含此功能的相关exec库?
在符合POSIX标准的操作系统(如GNU / Linux或Mac OS)上,您可以使用另一个系统调用(使用Runtime.exec
,ProcessBuilder
或一些本机实现的库)来发出kill
命令
使用kill
命令,您可以发送SIGSTOP
(暂停进程)和SIGCONT
(恢复进程)等信号。
答案 1 :(得分:2)
您需要创建一个系统,用于在进程之间发送消息。你可以这样做:
根据您的描述(复杂批处理环境中的所有Java程序),我建议#3,TCP / IP通信。
虽然它肯定涉及额外的工作,但它也使您可以灵活地在不同的流程之间发送任何类型的命令或信息。
答案 2 :(得分:0)
进程表示在计算机上运行的单独进程。 Java肯定不允许你通过java.lang.Process暂停它们。您可以使用Process.destroy()强制停止它们。对于暂停,您需要合作生成的过程。
这些是什么过程?你写过它们吗?