首页 文章

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

提问于
浏览
0

在创建进程并立即终止它之后, 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 回答

  • 5

    handle(进程句柄表中的索引)这是指向对象的间接指针(在具体情况下为 ETHREAD ) . 如果不是关闭句柄 - 对象( ETHREAD )将不是空闲的(直到您的进程终止,并且所有句柄将被关闭) . 是运行进程,线程与否 - 在这里不起任何作用 . 对象将不会被销毁,直到它存在引用(句柄)

  • 2

    docs for CreateProcess()所述:

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

    并在docs for PROCESS_INFORMATION

    包含有关新创建的进程及其主要线程的信息 . 它与CreateProcess,CreateProcessAsUser,CreateProcessWithLogonW或CreateProcessWithTokenW函数一起使用 . [...]如果函数成功,请确保在完成后调用CloseHandle函数关闭hProcess和hThread句柄 .

相关问题