创建子进程
Creating a child process
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。
相关文章:
- WMI检测进程创建事件-c++
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 从根权限进程创建可访问的文件
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 使用system()创建独立的子进程
- 使用 Node.js 调用child_process与从 C 调用子进程并创建C++绑定以从 node.js 调用
- 使用 fork 创建子进程时,父 ID 与父 ID 不同
- 创建子进程
- 子进程如何告诉其父进程创建新的子进程
- 如何在Linux下创建和监控子进程
- 使用CREATE_NEW_PROCESS_GROUP创建主机时,向子进程发送Ctrl+C
- c++ WIN API:当使用CreateProcess创建子进程时,我需要使输入参数具有全局生存期吗?
- Windows父进程和子进程创建
- 如何将应用程序作为新创建的资源管理器进程的子进程启动