重定向子进程的输出
Redirecting output from child processes
在我的 c++ Windows 应用程序中,我启动了多个子进程,我希望它们继承父进程的 stdout/stderr,这样如果我的应用程序的输出被重定向到某个文件,那么该文件还将包含我的应用程序创建的所有子进程的输出。
目前,我使用没有输出重定向的创建过程来做到这一点。MSDN 有一个如何重定向输出的示例:使用重定向的输入和输出创建子进程,但我想看看我有什么替代方案。最简单的方法是使用 system 并从等待子退出的阻塞线程调用它。然后,所有输出都通过管道传输回父级的 stdout/stderr,但是在父进程中,我没有机会处理来自子级的 stdout 数据。 还有其他函数可以在Windows上启动进程:spawn,exec,这可能更容易移植到posix系统。
如果我希望它在 linux/osx 上运行,我应该使用什么?如果我希望它在 UWP 又名 WinRT 上运行,我有什么选择?我可能完全可以接受从阻塞线程调用system
,但也许我更愿意能够对进程 PID(能够终止它)和进程 stdout/stderr 进行更多控制,例如在每一行前面加上child##:
。
boost 库最近发布了 1.64 版,其中包括一个新的boost::process
库。
在其中,您将获得一种能够将输出重定向到管道或asio::streambuf
的C++方法,您可以从中创建std::string
或std::istream
来读取子进程编写的任何内容。
您可以在此处阅读boost::process
教程,其中显示了读取子输出的一些简单示例。它确实大量使用boost::asio
,所以我强烈建议你也阅读一下。
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 捕获远程进程子进程的标准输出
- 重定向子进程的输出
- 控制台输出到子进程
- 在子进程处于活动状态时读取子进程的输出
- 重定向子进程的输入和输出不起作用
- 如何将视频文件作为输入传递给NodeJS中的子进程,并接收帧/图像作为输出
- Python逐行从子进程捕获标准输出
- 重定向子进程输出
- 重定向子进程输出到缓冲区
- 在 java 代码中执行子进程时缺少输出
- 以编程方式从父进程的子进程捕获打印,因此它们不会转到标准输出
- 重定向子进程输出到FIFO不工作