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

时间:2012-12-19 07:00:23

标签: c windows multiple-processes

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

但是,我希望他们是独立的流程,而不是亲子。

有没有办法在C(Windows)中执行此操作?

4 个答案:

答案 0 :(得分:6)

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

在Vista及更高版本中,您可以通过调用InheritedFromUniqueProcessId并适当填充STARTUPINFOEX结构来更改CreateProcess值:使用InitializeProcThreadAttributeList创建属性列表,然后添加具有UpdateProcThreadAttribute PROC_THREAD_ATTRIBUTE_PARENT_PROCESS属性。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

很可能fork在Windows中不存在新进程,而您可以使用CreateProcess函数来执行更轻松,更好的Windows选项。

答案 3 :(得分:0)

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

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

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