gpt4 book ai didi

java - 为什么 Java 创建的两个子进程表现不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:40 24 4
gpt4 key购买 nike

我使用 Java Runtime.getRuntime().exec(command) 创建一个子进程并打印它的 pid 如下:

public static void main(String[] args) {

Process p2;
try {
p2 = Runtime.getRuntime().exec(cmd);
Field f2 = p2.getClass().getDeclaredField("pid");
f2.setAccessible(true);
System.out.println( f2.get( p2 ) );
} catch (Exception ie)
{
System.out.println("Yikes, you are not supposed to be here");
}

}

我尝试了 C++ 可执行文件和 Java 可执行文件(.jar 文件)。两个可执行文件都会不断地将“Hello World”打印到标准输出。

cmd 是 C++ 可执行文件时,pid 会打印到控制台,但一旦 main() 返回,子进程就会被终止.但是,当我在 cmd 中调用 .jar 可执行文件时,子进程不会被终止,这是所需的行为。

我不明白为什么具有不同可执行文件的相同 Java 代码的行为会如此不同。我应该如何修改我的代码,以便我可以在 Java 中拥有持久的子进程?

PS:我使用的是 Ubuntu 9.10 和 OpenJDK-1.6。 (不确定它们是否重要~)

这个领域的新手。欢迎任何建议。

百合花

最佳答案

C++ EXE 几乎肯定被标记为控制台应用程序。我认为 jar 默认情况下会被视为 GUI 应用程序,并且会执行标准的从主进程分离的操作。

如果您将 C++ 代码转换为 GUI 应用程序,我想您会发现它的行为与 jar 类似。

关于java - 为什么 Java 创建的两个子进程表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com