我知道答案取决于特定的JVM,但我想了解它是如何实现的?是popen(posix)吗?在效率方面,我需要记住一些事情(除了使用javadoc建议的缓冲流)。我很想知道是否有一个关于JVM实现的一般参考来回答这些问题。
答案 0 :(得分:3)
在这种情况下,对于Unix,请查看UnixProcess class.it执行fork和exec并在本机文件描述符周围包装文件和缓冲区流。
pid = forkAndExec(prog,
argBlock, argc,
envBlock, envc,
dir,
redirectErrorStream,
stdin_fd, stdout_fd, stderr_fd);
stdin_stream = new BufferedOutputStream(new FileOutputStream(stdin_fd));
对于本机代码,请查看: 天然的/爪哇/郎/ UNIXProcess_md.c
它做了一些有趣的事情! 它打开管道并将它们作为STDIN,STDOUT,STDERR给予孩子,管道的另一侧由父母使用!
简而言之,IPC机制就是管道。