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

bejyjqdl  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(204)

所以我尝试用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()函数?

31moq8wy

31moq8wy1#

你不能。另一个进程是另一个可执行文件。除非你生成同一个程序的另一个示例,否则子进程甚至不会包含Hello()函数。
如果子进程是程序的另一个示例,则需要定义自己的方式来告诉子进程运行Hello(),可以是进程参数或std:cin上的一些协议(即使用标准输入进行进程间通信)
在UNIX/Linux平台上,你可以启动另一个进程,但不能运行不同的可执行文件。参见fork(2)系统调用。然后你可以在child中调用Hello()。但是boost::process:launch()在这样的平台上Map到fork+exec。普通fork()不会被boost公开,例如,因为它在其他平台上不存在。
可能有一些非常依赖平台的方法可以做你想做的事情,但你不想去那里。

相关问题