我有一个调用函数CreateProcess()
的进程,但是我从不从父进程调用CloseHandle()
,因为我不知道用户什么时候会退出子进程。这会导致某种泄漏还是没问题,因为当子进程关闭时,它会释放所有资源?
答案 0 :(得分:6)
如果您没有关闭手柄,则会有手柄泄漏。
你应该保留句柄,只要你需要把它传递给另一个WinAPI函数,例如,如果你需要有关过程的信息,比如a)它是否终止,b)什么是返回值,c)多少它消耗的处理器时间。您可以在不再需要时关闭手柄。关闭句柄不会关闭子进程,它仍将继续运行!
您可以在备注部分找到有关PROCESS_INFORMATION structure对MSDN影响的更多信息。另请注意,您需要CloseHandle
线程句柄。
答案 1 :(得分:1)
问题和评论引用了几句:
我从不从父进程调用
CloseHandle()
,因为我不知道用户何时会退出子进程。
和
产生进程的线程继续执行其他操作,并且在子进程关闭后预计会持续很长时间。所以我还不能关闭它?
我认为这是你的根本误解。句柄只是您与进程或线程对象交互的手段。关闭句柄不会终止对象。它只是整理手柄周围的资源。对象,进程或线程在您的句柄关闭后继续存在。
如果您需要终止该过程,请致电TerminateProcess
传递您的流程句柄。此时,您通常可以安全地关闭手柄。
以下是您需要遵循的规则:
答案 2 :(得分:0)
您可以关闭该流程的句柄。除非您致电TerminateProcess
,或者通过其他方法关闭,否则该流程将继续存在。
如果您不需要处理,请拨打CloseHandle
,并且您希望尽快执行此操作。
仍然拥有该进程的句柄将导致资源泄漏。虽然在流程终止时将删除流程及其资源,但除非您关闭该句柄,否则其中某些信息仍将继续存在。