我想知道是否有人确切知道ProcessBuilder / Runtime.exec()是否在JVM内存的空间内执行,或者它是否使用完全独立的系统内存并以某种方式将输出发送到Java。我找不到关于这个主题的任何文件。
我认为它是前者,因为安全问题并且能够读取输出,但我想绝对肯定。
答案 0 :(得分:5)
新进程在启动它的Java进程之外运行。作为process management的一部分,操作系统将内存分配给新进程。
Java类ProcessBuilder
,它提供了一个用于启动和与新进程通信的接口,在Java进程内部运行。
答案 1 :(得分:0)
很明显,exec为不熟悉操作系统术语的人启动了一个新流程或程序。这就是为什么它具有输入输出功能,设置环境的能力以及等待外部程序返回的能力。
The first line of the javadoc says it all
Executes the specified string command in a separate process.
The command argument is parsed into tokens and then executed as a command in a
separate process. The token parsing is done by a StringTokenizer created by the
call:
new StringTokenizer(command)
with no further modifications of the character categories. This method has exactly
the same effect as exec(command, null).
答案 2 :(得分:0)
来自Java SE的concurrency参考,据说:
进程具有自包含的执行环境。一个过程 通常有一套完整的私有基本运行时资源;在 特别是,每个进程都有自己的内存空间。
如果您对内部感兴趣,请从openJDK中检查UNIXProcess类。