【发布时间】:2023-07-31 01:08:02
【问题描述】:
我正在尝试找到一种使用 C++ 包装器在 Windows 中执行 java vm 的简单方法。我可以使用CreateProcess() 直接启动 java.exe 并使用我需要提供的所有参数。问题是这现在在进程管理器中显示为两个进程。所以,如果我杀死父进程,java.exe 实例仍然存在。
我需要这样做的原因是我们有几个 java 程序,所有这些程序都将同时运行。我希望能够在进程资源管理器中为它们提供可区分的名称,这样如果用户遇到其中一个问题,他们就不必猜测对应的 java.exe 进程。
【问题讨论】:
-
您不能在同一进程中执行批处理文件,期间。但是,您可能可以在同一进程中运行 Java VM。相应地编辑标题...
-
完成了,shell 似乎只是一个命令解释器——即另一个可执行文件。那么为什么我不能在同一个进程空间中启动它呢?
-
因为在 Windows 中,进程与可执行文件一一关联。没有等效于将另一个可执行文件加载到同一进程中的 exec() 调用。 DLL 是另一回事。然而,命令解释器不是 DLL - 它是 EXE。确切地说,是 Cmd.exe。
-
您已经回答了自己。 :) shell 是另一个可执行文件。好吧,可能有一些传统方法可以做到这一点(如在 DOS 时代),但在 Windows 中,您通常在其自己的进程空间中加载独立(非 DLL)可执行文件。您可以暂停创建进程并等待子进程,但新进程仍将在任务管理器中显示为新进程。自己检查一下:运行 cmd.exe 并从那里启动一个命令行可执行文件。
-
不,我相信你。我只是想更好地理解其中的原因。我来自一个 Linux 世界,这似乎是一件容易(也许更容易)完成的事情。
标签: c++ windows process ipc system