在创建进程并立即终止它之后,是否有必要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?
答案 0 :(得分:5)
不再需要使用CloseHandle关闭PROCESS_INFORMATION中的句柄。
在docs for PROCESS_INFORMATION
中:
包含有关新创建的进程及其主线程的信息。它与CreateProcess,CreateProcessAsUser,CreateProcessWithLogonW或CreateProcessWithTokenW函数一起使用。
[...]
如果函数成功,请确保在完成处理后调用CloseHandle函数来关闭hProcess和hThread句柄。
答案 1 :(得分:2)
handle(进程句柄表中的索引),这是指向对象的间接指针(在您的具体情况下,ETHREAD
)。如果没有关闭,则句柄-对象(ETHREAD
)将不是空闲的(直到您的进程终止,并且所有句柄都将关闭)。是否正在运行进程,是否在运行-在这里不起作用。除非存在引用(句柄),否则该对象不会被破坏