首页 > 解决方案 > 进程终止后是否需要关闭线程句柄?

问题描述

在创建进程并立即终止它之后,是否需要CloseHandle在结构中返回线程句柄PROCESS_INFORMATION

  STARTUPINFO si;
  GetStartupInfo(&si);
  PROCESS_INFORMATION pi;
  CreateProcess(0, cmdLine, 0, 0, FALSE, CREATE_SUSPENDED, 0, 0, &si, &pi);

  TerminateProcess(pi.hProcess, 0);

  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);  // Is this necessary?

标签: windowswinapi

解决方案


文档中CreateProcess()所述:

PROCESS_INFORMATION 中的句柄在不再需要时必须使用 CloseHandle 关闭。

文档中PROCESS_INFORMATION

包含有关新创建的进程及其主线程的信息。它与 CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW 或 CreateProcessWithTokenW 函数一起使用。

[...]

如果函数成功,请务必在完成处理后调用 CloseHandle 函数来关闭 hProcess 和 hThread 句柄。


推荐阅读