C 标准是否支持进程?

新手上路,请多包涵

我知道 C++11 增加了对线程的支持。例如:

 #include <iostream>
#include <thread>

void bar()
{
    std::cout << "bar()\n";
}

int main()
{
    std::thread thread(bar);
    thread.join();

    return 0;
}

但是,有没有办法在单独的进程中执行 bar 函数?如果没有,有没有讨论是否应该增加这样的功能?

注意: 我知道使用平台独立库的可能性,我只是好奇 C++ 是否直接支持或将来会支持。

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

阅读 394
1 个回答

不,c++ 标准(尤其是 C++11)没有任何 进程 的概念(因此我不能在这里给你一个更合理的参考作为最流行和当前最新的 c++ 文档的 搜索结果 地点)。

我也不知道为下一个标准版本 C++-17(又名 C++-1z)计划了进程支持。至少 维基百科网站 没有提到它。

有一个流行的 实现 被提议用于提升,但从未被用于 C++ 标准提议。

您通常无法编写可移植代码以在仅存在一个 进程 的裸机系统上运行。


但是,有没有办法在单独的进程中执行 bar() 函数?

最简单的选择是回 fork()wait() 由 POSIX Open Group 指定:

 #include <iostream>
#include <unistd.h>
#include <sys/wait.h>

void bar()
{
    std::cout << "bar()\n";
}

int main(int argc, char **argv)
{
    pid_t pid = fork();

    if (pid == 0)
    {
        // child process
        bar();
    }
    else if (pid > 0)
    {
        // parent process
        wait(NULL);
    }
    else
    {
        // fork failed
        std::cerr << "fork() failed!" << std::endl;
        return 1;
    }

    return 0;
}


尽管我认为创建一个额外的过程来执行一个简单的功能并没有多大意义。在这种情况下,创建流程会产生很多您不希望的开销。

好吧,如果您想使用 exec() 函数系列中的函数启动另一个程序,那是一个不同的用例。

我建议您以 std::thread 为例。

原文由 πάντα ῥεῖ 发布,翻译遵循 CC BY-SA 3.0 许可协议

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