2

我想从代码本身中创建一个 exe 的新进程,这样我就可以有两个并行进程。

但是,我希望它们是单独的进程而不是父子进程。

有没有办法在C(Windows)中做到这一点?

4

4 回答 4

6

在 Windows 中,进程没有父进程。一些工具会读取该InheritedFromUniqueProcessId值,但这并不能告诉您哪个进程启动了您的进程。它只告诉您句柄和其他属性是从哪里继承的。然而,在实践中,该值通常设置为启动子进程的进程的 ID。

InheritedFromUniqueProcessId在 Vista 及更高版本上,您可以通过调用适当填写CreateProcess的结构来更改值:使用 创建一个属性列表,并使用 添加一个属性。STARTUPINFOEXInitializeProcThreadAttributeList PROC_THREAD_ATTRIBUTE_PARENT_PROCESSUpdateProcThreadAttribute

在 XP 上,没有官方的方法可以做到这一点。您可以尝试使用NtCreateProcessor RtlCreateUserProcess,但它们无法正确设置 Win32 子系统,因此您的程序可能无法运行。

于 2012-12-19T10:18:40.383 回答
0

我过去做过的一个丑陋的方法是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个孩子失去与原始父母的任何关联。

我确定我后来找到了更好的方法来做到这一点,但我四处张望,目前找不到任何东西。

于 2012-12-19T07:17:14.270 回答
0

Windows 中最有可能fork不存在新进程,而您可以使用CreateProcess函数来执行此操作,这对于 Windows 来说更容易和更好的选择。

于 2012-12-19T07:25:58.973 回答
0

“简单”的方法是使用中间命令,请参阅此处的 KB:

http://support.microsoft.com/kb/315939

拥有独立进程的另一种方法是确保不继承句柄以确保第二个进程,并创建一个新的进程组。请参阅创建独立进程!

于 2012-12-19T08:43:43.060 回答