【发布时间】:2011-08-08 20:40:00
【问题描述】:
来自java.lang.Process的javadoc:
创建进程的方法可能不适用于某些本机平台上的特殊进程,例如本机窗口进程、守护进程、Microsoft Windows 上的 Win16/DOS 进程或 shell 脚本。创建的子进程没有自己的终端或控制台。它所有的标准io(即stdin、stdout、stderr)操作都会通过三个流(getOutputStream()、getInputStream()、getErrorStream())重定向到父进程。父进程使用这些流向子进程提供输入并从子进程获取输出。由于一些原生平台只为标准输入输出流提供有限的缓冲区大小,未能及时写入子进程的输入流或读取输出流可能会导致子进程阻塞,甚至死锁。
我知道这个问题,当然,如果您想与子进程进行通信,及时与它进行通信是有意义的。
但是,如果您只想启动一个进程而不关心 I/O,该怎么办?在 Java 中,有没有办法释放父进程中专门用于管理子进程的资源? (例如 I/O 管道和等待子进程退出状态)
如果我在父进程中执行以下操作:
Process.getOutputStream().close();
Process.getInputStream().close();
Process.getErrorStream().close();
我还需要担心死锁吗? (例如,如果子进程不断将数据发送到自己的标准输出)
【问题讨论】:
标签: java subprocess blocking