如何创建一个不是它创建过程的孩子的过程?

时间:2010-06-28 21:11:39

标签: windows mfc createprocess shellexecuteex

我有两个进程,A和B.在某些时候A创建B.创建B后,如果A的进程 tree 被杀死,我希望B仍然存在。

我正在使用CreateProcess()来创建B,我似乎无法找到任何方法来让它在没有孩子的情况下创建过程。与ShellExecuteEx()相同,但我可能错过了一些标志。

有谁知道我可以用它做什么?

编辑:我忘了提到两个进程都需要HANDLE或进程ID到另一个进程

2 个答案:

答案 0 :(得分:3)

您可以在createprocess API中将paramaeter dwcreationflags设置为DETACHED_PROCESS。

答案 1 :(得分:1)

您可以尝试该过程创建过程C,创建过程B然后过程C将立即结束(终止)。在进程B中,只存在关于直接父进程的信息(C的进程Id不再运行)而不存在进程A.所以“如果A的进程树被杀死”,进程B可能会继续运行。 / p>

例如,您启动Process Explorer(请参阅http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)然后启动Total Commander。从Total Commander中启动cmd.exe。从cmd.exe启动notepad.exe。然后在cmd.exe中键入“exit”。终止cmd.exe后,您可以看到在Total Commander(totalcmd.exe)下不再显示notepad.exe。在Process Explorer中为Total Commander(totalcmd.exe)选择“杀死进程树”后,您可以看到notepad.exe保持运行。