C ++推出另一个流程的最佳方式?

问题描述 投票:0回答:3

我已经有一段时间了,因为我不得不这样做,过去我曾用“spawn”来创建流程。

现在我想异步启动应用程序中的进程,以便我的应用程序继续在后台执行,并且不会因启动进程而停滞不前。

我还希望能够与已启动的流程进行通信。当我启动该过程时,我将向它发送启动程序进程ID,以便启动的进程可以使用它的pid与启动程序通信。

什么是最好的使用方法并非特定于任何平台/操作系统,我正在寻找一个多平台的解决方案?

我用C ++编写这个,我不想要一个能将我与任何第三方许可产品联系起来的解决方案。

我不想使用线程,解决方案必须是创建新进程。

c++ fork spawn
3个回答
2
投票

试试Boost.Process

Boost.Process为C ++编程语言提供了一个灵活的框架来管理正在运行的程序,也称为进程。它使C ++开发人员能够执行Java开发人员可以使用java.lang.Runtime / java.lang.Process和.NET开发人员可以使用System.Diagnostics.Process执行的操作。除了其他功能之外,还包括管理当前正在运行的进程的执行上下文的能力,生成新子进程的能力,以及使用标准C ++流和异步I / O与它们进行通信的方法。

该库的设计方式是将所有流程管理细节透明地抽象给用户,从而实现跨平台应用程序的轻松开发。但是,由于此类抽象通常会限制开发人员可以执行的操作,因此该框架允许直接访问特定于操作系统的功能 - 显然会丢失库的可移植性功能。

从站点运行并等待完成子进程的示例代码:

bp::child c(bp::search_path("g++"), "main.cpp");

while (c.running())
    do_some_stuff();

c.wait(); //wait for the process to exit   
int result = c.exit_code();

0
投票

我将插入我自己的小(单头)库:

PStreams允许您从C ++应用程序运行另一个程序,并在两个程序之间传输数据,类似于shell管道。

在最简单的情况下,PStreams类就像POSIX.2函数popen(3)和pclose(3)的C ++包装器一样,使用C ++ iostream而不是C的stdio库。

该库提供了标准iostream样式的类模板,可以与POSIX平台上的任何ISO C ++编译器一起使用。这些类使用streambuf类,它使用fork(2)和exec(2)系列函数来创建一个新进程,并创建最多三个管道来向/从进程写入/读取数据。


-1
投票

std::system便携式推出新工艺。

#include <cstdlib>

int main() {
   std::system("./myapp");
   return 0;
}

如果您使用Linux并且想要在进程之间共享句柄/内存,那么fork就是您正在寻找的

© www.soinside.com 2019 - 2024. All rights reserved.