CloseHandle(进程)在已结束的进程上返回ERROR_INVALID_HANDLE但保持句柄

时间:2014-03-27 23:47:22

标签: process handle

我有句柄问题,我无法解释。

情况: 申请/流程

  1. 使用CreateProcess调用其EXE文件
  2. 再次启动(使用不同的参数)
  3. 使用WaitForSingleObject
  4. 等待此新实例完成
  5. WaitForSingleObject返回0后,我会使用GetExitCodeProcess
  6. 获取exitcode
  7. 使用CloseHandle
  8. 关闭已结束进程的句柄

    除了返回CloseHandle的{​​{1}}和false返回6(= ERROR_INVALID_HANDLE)之外,每次调用都会返回成功。

    根据this SO post,该过程保持有效,直到最后一个句柄关闭。这对我来说似乎不对。

    我遇到的问题是根据ProcessExplorer / Taskmanager,每当我调用GetLastError时,进程的句柄数增加2.随着时间的推移,手持量很高,整个Windows开始变得怪异并冻结...

    ProcExp的底部为每个调用列出了一个非现有进程的句柄和一个非现有线程的句柄。

    感谢您的意见。

    PS:应用程序是使用对kernel32.dll的外部函数调用在PowerBuilder中编写的。简化代码如下所示:

    CreateProcess

0 个答案:

没有答案