我想从代码本身创建一个exe的新进程,这样我就可以有两个并行进程。
但是,我希望他们是独立的流程,而不是亲子。
有没有办法在C(Windows)中执行此操作?
答案 0 :(得分:6)
在Windows中,processes don't have parents。有些工具会读取InheritedFromUniqueProcessId
值,但这并不能告诉您哪个进程已启动您的进程。它只告诉您继承句柄和其他属性的位置。但实际上,此值通常设置为启动子进程的进程的ID。
在Vista及更高版本中,您可以通过调用InheritedFromUniqueProcessId
并适当填充STARTUPINFOEX
结构来更改CreateProcess
值:使用InitializeProcThreadAttributeList
创建属性列表,然后添加具有UpdateProcThreadAttribute
的
PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
属性。
在XP上,没有正式的方法可以做到这一点。您可以尝试使用NtCreateProcess
或RtlCreateUserProcess
,但这些不会正确设置Win32子系统,因此您的程序可能无法运行。
答案 1 :(得分:0)
我过去做过的一种丑陋的方式是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个孩子与原始父母失去任何关联。
我确信我后来找到了一个更好的方法来做到这一点,但我已经四处寻找,目前找不到任何东西。
答案 2 :(得分:0)
很可能fork
在Windows中不存在新进程,而您可以使用CreateProcess函数来执行更轻松,更好的Windows选项。
答案 3 :(得分:0)
“简单”的方法是使用中间命令,请参见此处的KB:
http://support.microsoft.com/kb/315939
拥有独立进程的另一种方法是确保不继承句柄以确保第二个进程,并创建一个新的进程组。见Creating independent process!