创建子进程

Creating a child process

本文关键字:子进程 创建      更新时间:2023-10-16

Windows 上的 C++我已经创建了一个cmd的子进程.exe但是当我读取管道时它卡住了

HANDLE parent = GetStdHandle(STD_OUTPUT_HANDLE);
char buffer[BUFSIZE];
DWORD read, written;
BOOL b = true;
for(;;)
{
    b = ReadFile(g_hChildStd_OUT_Rd, buffer, BUFSIZE, &read, NULL);
    if(! b || read == 0) break;
    b = WriteFile(parent, buffer, read, &written, NULL);
    if(! b) break;
}

它在我的控制台中打印 cmd.exe 的输出,但它在此循环中挂起。我只需要弄清楚为什么它不会打破循环

编写的代码应在管道的写入端关闭时退出,这发生在管道的最后一个句柄关闭时。 如果子进程退出,则它到管道写入端的句柄将自动关闭。

没有展示足够的代码让我确定,但最可能的原因是你没有关闭管道写入端的句柄。 如果在启动子进程后关闭句柄,则代码应该可以工作。

你的循环是无限的,因为 b 总是为真,因为 ReadFile 和 WriteFile 在你的情况下总是成功的,而读取永远不会是 0。