我写了两个使用匿名管道进行通信的短程序。父进程通过设置子进程的标准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句柄,所以它们会在进程关闭时自动释放。 谢谢!
调试->附加到进程
或类似选项)。 - adf88