在C中创建新进程和子进程的区别(Windows)

问题描述:

我想从代码本身创建一个exe的新进程,以便我可以有两个并行进程。在C中创建新进程和子进程的区别(Windows)

但是,我想让他们成为独立的进程而不是父子。

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

+2

导致您问题的亲子关系有什么问题? –

在Windows中,processes don't have parents。有些工具读取InheritedFromUniqueProcessId值,但这并不告诉你哪个进程开始你的进程。它只会告诉你句柄和其他属性是从哪里继承的。但实际上,这个值通常设置为启动子进程的进程的ID。

在Vista及以上的,可以通过调用CreateProcessSTARTUPINFOEX结构填写适当地改变InheritedFromUniqueProcessId值:与InitializeProcThreadAttributeList创建一个属性列表,并与UpdateProcThreadAttribute添加 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性。

在XP上,没有官方的做法。您可以尝试使用NtCreateProcessRtlCreateUserProcess,但这些不会正确设置Win32子系统,因此您的程序可能无法运行。

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

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

最有可能的fork在窗口中不存在新的进程,而您可以使用CreateProcess函数来做到这一点,这是更容易和更好的Windows选项。

“易”的方法是使用一个中间命令,请参阅知识库这里:

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

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