在windows编程中往往会需要创建一个子进程,在主进程中调用CreateProcess创建子进程成功后,此时的子进程的进程内核对象和主线程内核对象的使用计数会变成2,这样子进程在理论上不是独立的,虽然windows系统在创建子进程后父子进程的关系会断掉。所以,作为windows程序员需要养成一个好的习惯,那就是在主进程创建子进程后要记得关闭子进程相关句柄。
在创建子进程时,CreateProcess函数会接受一个结构体PROCESS_INFORMATION,此结构体在MSDN中如下描述:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
该结构体会获得子进程的进程内核句柄和主线程内核句柄,那么我们就可以通过CloseHandle函数来关闭这些句柄,来保证子进程的独立性,代码如下:
PROCESS_INFORMATION pi;
BOOL fSuccess = CreateProcess(..., &pi);
if (fSuccess)
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
虽然简单,还是得注意哦~~~