在我的c ++ windows应用程序中,我启动了多个子进程,我希望它们继承父进程的stdout / stderr,这样如果我的应用程序的输出被重定向到某个文件,那么该文件也将包含所有子进程的输出我的应用创建的流程。
目前我使用没有输出重定向的CreateProcess来做到这一点。 MSDN有一个示例如何重定向输出:Creating a Child Process with Redirected Input and Output,但我想看看我有什么替代方案。最简单的方法是使用系统并从等待子进程的阻塞线程中调用它。然后将所有输出传送回父级的stdout / stderr,但是在父进程中,我没有机会处理来自子级的stdout数据。 还有其他功能可以在Windows上启动进程:spawn,exec,这可能更容易移植到posix系统。
如果我希望它能在linux / osx上运行,我应该使用什么?如果我想让它在UWP aka WinRT上工作,我有哪些选择?我可能完全可以通过阻塞线程调用system
,但也许我更喜欢能够对进程PID进行更多控制(以便能够终止它)并处理stdout / stderr,例如,在每行前加child##:
。
答案 0 :(得分:0)
boost库最近发布了1.64版,其中包含一个新的boost::process
库。
在其中,您将获得一种C ++方式,可以将输出重定向到管道或asio::streambuf
,您可以从中创建std::string
或std::istream
以阅读任何内容儿童过程写道。
您可以阅读boost::process
tutorials here,其中显示了一些阅读子输出的简单示例。它确实大量使用boost::asio
,因此我强烈建议您read up on that。