我使用Windows API CreateProcess
功能。在msdn手册中,我找到了
如果函数成功,请确保在完成后调用CloseHandle函数关闭hProcess和hThread句柄。否则,当子进程退出时,系统无法清除子进程的进程结构,因为父进程仍然具有子进程的打开句柄。
所以我应该在哪里这样做?
情况是这个过程已经开始,并且没有他的生命轨迹。它是否强制我创建一个线程,在那里创建进程然后线程将等待使用,例如WaitForSingleObject
,直到进程停止,因此句柄可以被释放?
答案 0 :(得分:4)
您不必等待子流程完成,当您不再需要处理时,您只需CloseHandle
。
这样做的原因是,即使在该过程完成后您也可能希望保留该过程的句柄。例如,您可能想要检查其返回状态。只要你掌握了它,Windows就无法清理它。
但如果你不再关心孩子做了什么,请关上手柄继续前进。
如果您小心翼翼,请致电WaitForSingleObject
并为其提供CreateProcess
提供的句柄。或者使用将在进程结束时调用的回调函数调用RegisterWaitForSingleObject
(再次传递进程句柄)。