在C中创建新进程和子进程的区别(Windows)
我想从代码本身创建一个exe的新进程,以便我可以有两个并行进程。在C中创建新进程和子进程的区别(Windows)
但是,我想让他们成为独立的进程而不是父子。
有没有办法在C(Windows)中做到这一点?
在Windows中,processes don't have parents。有些工具读取InheritedFromUniqueProcessId
值,但这并不告诉你哪个进程开始你的进程。它只会告诉你句柄和其他属性是从哪里继承的。但实际上,这个值通常设置为启动子进程的进程的ID。
在Vista及以上的,可以通过调用CreateProcess
与STARTUPINFOEX
结构填写适当地改变InheritedFromUniqueProcessId
值:与InitializeProcThreadAttributeList
创建一个属性列表,并与UpdateProcThreadAttribute
添加 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
属性。
在XP上,没有官方的做法。您可以尝试使用NtCreateProcess
或RtlCreateUserProcess
,但这些不会正确设置Win32子系统,因此您的程序可能无法运行。
我过去做过的一种丑陋的方式是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个孩子失去与原始父母的任何关联。
我确定我后来找到了一个更好的方法来做到这一点,但我四处寻找,目前找不到任何东西。
“易”的方法是使用一个中间命令,请参阅知识库这里:
http://support.microsoft.com/kb/315939
另一种方式拥有独立的进程是确保不继承句柄确保第二进程,并创建一个新的流程组。请参阅Creating independent process!
导致您问题的亲子关系有什么问题? –