Boost.Process - 如何让一个进程运行一个函数?

Posted

技术标签:

【中文标题】Boost.Process - 如何让一个进程运行一个函数?【英文标题】:Boost.Process - how to make a process run a function? 【发布时间】:2011-01-23 16:35:50 【问题描述】:

所以我尝试使用 Boost.Process 做一些事情,尽管它还没有被 Boost 发行版接受。

最简单的程序看起来像

#include <boost/process.hpp> 
#include <string> 
#include <vector> 

namespace bp = ::boost::process; 

void Hello()

    //... contents does not matter for me now - I just want to make a new process running this function using Boost.Process.
 

bp::child start_child() 
 
    std::string exec = "bjam"; 

    std::vector<std::string> args; 
    args.push_back("--version"); 

    bp::context ctx; 
    ctx.stdout_behavior = bp::silence_stream(); 

    return bp::launch(exec, args, ctx); 
 

int main() 
 
    bp::child c = start_child(); 

    bp::status s = c.wait(); 

    return s.exited() ? s.exit_status() : EXIT_FAILURE; 
 

我创建的进程如何执行 Hello() 函数?

【问题讨论】:

【参考方案1】:

你不能。另一个进程是另一个可执行文件。除非您生成同一程序的另一个实例,否则子进程甚至不会包含 Hello() 函数。

如果孩子是您程序的另一个实例,您需要定义自己的方式来告诉孩子运行 Hello()。这可能是进程参数或 std:cin 上的某些协议(即使用标准输入进行进程间通信)

在 UNIX/Linux 平台上,您可以启动另一个进程而不是运行不同的可执行文件。请参阅 fork(2) 系统调用。然后你可以在孩子中调用 Hello() 。但是 boost::process:launch(9 在这些平台上映射到 fork+exec。普通的 fork() 不会被 boost 公开,例如因为它在其他平台上不存在。

可能有非常依赖于平台的方式来做你想做的事,但你不想去那里。

【讨论】:

所以这意味着 Boost.Process 只是一个库,可以使用不同的命令行参数多次启动我的进程? @Kabumbus:先准备好this。也可能this 是你要找的。​​span>

以上是关于Boost.Process - 如何让一个进程运行一个函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有超时的异步模式的boost进程运行进程

Windows 上的 Boost::process - 使用 MinGW?

boost::log 多进程

Boost::process child by id

Boost 进程在新窗口中打开进程 (Windows)

如何使用 Boost.Process 从“类型”(Windows)获取跟踪?