Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么不';不能很好地与ProcessBuilder和守护进程配合使用_Java_Unix_Daemons - Fatal编程技术网

Java 什么不';不能很好地与ProcessBuilder和守护进程配合使用

Java 什么不';不能很好地与ProcessBuilder和守护进程配合使用,java,unix,daemons,Java,Unix,Daemons,在ProcessBuilder的JavaDoc上,它声明 创建进程的方法可能无法很好地用于某些本机服务器上的特殊进程 平台,如本机窗口进程、守护进程、Windows上的Win16/DOS进程 Microsoft Windows或shell脚本 我的主要问题是ProcessBuilder在守护进程中不能很好地工作是什么?ProcessBuilder不适合作为启动这些类型应用程序的一种可接受的方式,那又如何呢 谢谢 我的猜测(基于我在中找到的评论)是,问题在于您必须处理流程流,而这种处理可能是一个问

在ProcessBuilder的JavaDoc上,它声明

创建进程的方法可能无法很好地用于某些本机服务器上的特殊进程 平台,如本机窗口进程、守护进程、Windows上的Win16/DOS进程
Microsoft Windows或shell脚本

我的主要问题是ProcessBuilder在守护进程中不能很好地工作是什么?ProcessBuilder不适合作为启动这些类型应用程序的一种可接受的方式,那又如何呢

谢谢

我的猜测(基于我在中找到的评论)是,问题在于您必须处理流程流,而这种处理可能是一个问题

创建流程的方法可能无法很好地用于特殊情况 某些本机平台上的进程,如本机窗口 进程、守护进程、Microsoft Windows上的Win16/DOS进程、, 或shell脚本。创建的子流程没有自己的子流程 终端或控制台。其所有标准I/O(即标准输入、标准输出、标准输出) 操作将通过三种方式重定向到父进程 流(getOutputStream()、getInputStream()、getErrorStream())。这个 父进程使用这些流将输入馈送到并从中获取输出 子流程。因为一些本机平台只提供有限的 标准输入和输出流的缓冲区大小,未能及时 可以写入子流程的输入流或读取子流程的输出流 导致子进程阻塞,甚至死锁

这也可能与以下事实有关:
Process
是一个抽象类,每个JRE/JDK都带有自己的依赖于平台的流程实现(例如
UNIXProcess
WindowsProcess
等)有些操作系统可能只是有一些与开放进程相关的限制,而Java在其文档中无法涵盖这些限制

这只是一个猜测,代码并没有透露太多


根据我的经验(在*nix系统和windows上)-在大多数情况下,您的代码都需要了解如何构造命令行、如何提供参数(在
参数中或在命令行中)以及如何构建生成的进程的环境(继承进程的值或自己创建)。无论如何,这更像是一个反复试验的游戏。

JavaDoc中哪里有这样的说明?我找不到。它说的是进程上的,这是ProcessBuilder在您想要执行它时返回的。