好的Java进程控制库

29

Java进程控制因Java虚拟机/JDK类(如java.lang.Process)的支持不足而声名狼藉。

我想知道,是否有任何可靠的开源库可以满足以下要求:

  1. 开源
  2. 启动/停止进程
  3. 管理标准输入和标准输出
  4. 跨平台(至少包括Linux、Windows、Solaris、HP和IBM)
  5. (可选)可重启
  6. (理想情况下)成熟可靠

我会将进程依赖性概念添加为要求:只有在其依赖的进程/服务已启动时,进程/服务才应该启动。如果一个进程/服务被停止,那么它所有的依赖进程/服务也会被停止。 - Max Spring
现在是2015年。我想知道是否有什么变化,现在这个问题的答案会不同。 - wilx
现在已经是2020年了,看起来似乎没有太多替代Java进程API的选择。 - XZen
有一个名为jProcesses的库可在Maven和Github上找到,该库非常出色、强大且跨平台。 - Michael Sims
3个回答

15

2
好的提示 - 同时也是好的教程!http://commons.apache.org/exec/tutorial.html - grrussel
1
我认为Apache Commons Exec提供的抽象级别不如Java Service Wrapper。对于实现进程/守护程序管理器,Commons Exec可能是一个不错的起点。 - Max Spring

5

还有一个要求...跨平台支持孤立进程的终止。使用java.lang.Process(以及Apache Commons Exec),当Java应用程序进行强制停止(kill -9)时,没有办法杀死外部进程。我真的很希望能找到一个能够更好地处理这个问题的库。

一种解决方案可能是将PID存储在磁盘上的某些资源中,然后在Java应用程序重新启动时杀死进程。当然,这将依赖于平台,所以一个好的跨平台库将是非常棒的。


5

Java Service Wrapper 可能是你在寻找的东西。它是跨平台的,可以用来启动任何Java应用程序作为Windows服务、捕获IO并完全管理。它非常轻量级且设计良好。Atlassian使用它来封装他们的产品(Jira、Bamboo等),因此它经过了实战考验。


3
服务管理方面它还好,但几乎不是一个可用于简单流程控制的库。此外,它并不完全是开源软件。 - Omry Yadan
@Omry JSW有一个非常好的过程控制库(http://wrapper.tanukisoftware.com/doc/english/child-exec.html),问题是它不是开源软件。 - jnorris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接