1

我想知道是否有人确切地知道 ProcessBuilder/Runtime.exec() 是否在 JVM 内存空间内执行,或者它是否使用完全独立的系统内存并以某种方式将输出发送到 Java。我找不到有关该主题的任何文档。

由于安全问题和能够读取输出,我认为是前者,但我想绝对确定。

4

3 回答 3

5

新进程在启动它的 Java 进程之外运行。作为进程管理的一部分,分配给新进程的内存由操作系统管理

Java 类ProcessBuilder,它提供了一个用于启动和与新进程通信的接口,在 Java 进程内部运行。

于 2012-06-04T15:25:41.860 回答
0

似乎很清楚 exec 为那些不熟悉操作系统术语的人启动了一个新进程或程序。这就是为什么它具有输入输出功能、设置环境的能力以及等待外部程序返回的能力。

javadoc 的第一行说明了一切

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).
于 2012-06-04T15:29:23.100 回答
0

从Java SE的并发参考中说:

一个进程有一个独立的执行环境。一个进程通常有一套完整的、私有的基本运行时资源;特别是,每个进程都有自己的内存空间。

如果您对内部结构感兴趣,请查看 openJDK 中的 UNIX Process 类。

于 2012-06-04T15:31:51.053 回答