我正在尝试决定是否使用ProcessBuilder
或 Commons 执行人员,
我的要求是,我只是想创建一个守护进程,我不关心其 stdout/stdin/stderr 。另外,我想在时机成熟时执行一个kill来销毁这个进程。
我在 Linux 上使用 Java。
我知道两者都有其痛苦和陷阱(例如确保使用单独的线程吞咽流可能会导致阻塞或死锁,并关闭流以免留下打开的文件)并且想知道是否有人有建议方式或其他方式以及任何可以遵循的好的资源。
The ZT流程执行者 https://github.com/zeroturnaround/zt-exec库是 Apache Commons Exec 的替代品。它具有运行命令、捕获其输出、设置超时、验证程序退出状态等功能。
我使用过它一点,我发现它设计精良,记录也很齐全。
文档中的示例
执行命令,将 stderr 发送到记录器,以 UTF8 字符串形式返回输出。
String output = new ProcessExecutor().command("java", "-version")
.redirectError(Slf4jStream.of(getClass()).asInfo())
.readOutput(true).execute()
.outputUTF8();
其文档列出了与 Commons Exec 相比的以下优点:
- 改进了流的处理
- 读/写流
- 将 stderr 重定向到 stdout
- 改进了超时处理
- 改进了退出代码的检查
- 改进的API
- 一种衬垫适用于相当复杂的用例
- 一个衬垫将流程输出获取到字符串中
- 访问Process可用对象
- 支持异步进程(Future )
- 改进了日志记录SLF4J API http://www.slf4j.org/
- 支持多进程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)