C启动另一个进程的最佳方式?

新手上路,请多包涵

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

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

我还希望能够与启动的进程进行通信。当我启动进程时,我会将启动器进程 ID 发送给它,以便启动的进程可以使用它的 pid 与启动器通信。

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

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

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

原文由 SPlatten 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
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();

原文由 Oliort UA 发布,翻译遵循 CC BY-SA 4.0 许可协议

启动新进程的可移植程序是 std::system

 #include <cstdlib>

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

如果你使用 linux 并且你想在进程之间共享句柄/内存,那么你正在寻找 fork

原文由 cprogrammer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题