我编写了两个使用匿名管道进行通信的简短程序。父进程通过为子进程设置标准 IO 句柄来共享管道句柄:
// -- Set STARTUPINFO for the spawned process -------------------------
ZeroMemory(&m_ChildSI, sizeof(STARTUPINFO));
GetStartupInfo(&m_ChildSI);
m_ChildSI.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
m_ChildSI.wShowWindow = SW_HIDE;
m_ChildSI.hStdError = m_pipeChild.WritePipeHandle();
m_ChildSI.hStdOutput = m_pipeChild.WritePipeHandle();
m_ChildSI.hStdInput = m_pipeParent.ReadPipeHandle();
子进程通过调用GetStdHandle获取读取管道句柄:
hReadPipe = GetStdHandle(STD_INPUT_HANDLE)
我的问题是:管道句柄是由调用CloseHandle () 的父进程创建的,一旦父子完成通信。
孩子也必须调用 CloseHandle() 吗?我在想,因为这些是标准的 IO 句柄,所以当进程折叠时它们会被自动释放。
谢谢!