什么与ProcessBuilder和Daemons不兼容

时间:2012-10-08 17:16:57

标签: java unix daemons

在ProcessBuilder的JavaDoc上,它说明了

  

创建进程的方法可能不适用于某些本机的特殊进程   平台,例如本机窗口进程,守护进程,Win16 / DOS进程   Microsoft Windows或shell脚本。

我的主要问题是ProcessBuilder与守护程序进程不兼容?那么ProcessBuilder不能成为启动这些类型应用程序的可接受方式吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的猜测(基于我在code grep中发现的评论)是问题在于您必须处理流程流并且此处理可能是一个问题。

  

创建流程的方法可能不适用于特殊方法   某些本机平台上的进程,例如本机窗口   进程,守护程序进程,Microsoft Windows上的Win16 / DOS进程,   或shell脚本。创建的子流程没有自己的子流程   终端或控制台。所有标准I / O(即stdin,stdout,stderr)   操作将通过三个重定向到父进程   streams(getOutputStream(),getInputStream(),getErrorStream())。该   父进程使用这些流来输入和输出   子流程。因为某些本机平台仅提供有限的   标准输入和输出流的缓冲区大小,无法及时   写入输入流或读取子进程的输出流可能   导致子进程阻塞,甚至死锁。

这也可能与Process是一个抽象类的事实有关,每个JRE / JDK都带有它自己的平台相关流程实现(例如UNIXProcessWindowsProcess等。 )有些操作系统可能只是有一些与Java无法在其文档中涵盖的打开过程相关的限制。

再次 - 这只是一个猜测,代码没有透露太多。

根据我的经验(在* nix系统和Windows上) - 您的代码需要在构建命令行的大部分时间都是平台感知的,如何提供参数(在arguments参数中或在命令行中)以及如何构建生成进程的环境(继承进程的值或自己创建)。无论如何,这更像是一场反复试验的游戏。