进程终止后是否需要关闭线程句柄?

时间:2018-12-10 09:35:26

标签: windows winapi

在创建进程并立即终止它之后,是否有必要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?

2 个答案:

答案 0 :(得分:5)

docs for CreateProcess()中所述:

  

不再需要使用CloseHandle关闭PROCESS_INFORMATION中的句柄。

docs for PROCESS_INFORMATION中:

  

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

     

[...]

     

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

答案 1 :(得分:2)

handle(进程句柄表中的索引),这是指向对象的间接指针(在您的具体情况下,ETHREAD)。如果没有关闭,则句柄-对象(ETHREAD)将不是空闲的(直到您的进程终止,并且所有句柄都将关闭)。是否正在运行进程,是否在运行-在这里不起作用。除非存在引用(句柄),否则该对象不会被破坏