c++ - C++ 标准是否支持进程?

标签 c++ c++11

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

#include <iostream>
#include <thread>

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

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

    return 0;
}

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

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

最佳答案

不,c++ 标准(尤其是 C++11)没有任何进程的概念(因此我无法在此处为您提供更合理的引用,如 search result 来自最流行和当前最新的 C++ 文档站点)。

我也不知道下一个标准版本 C++-17(又名 C++-1z)计划支持进程。至少 Wikipedia Site没提。

有一个受欢迎的implementation这是为提升而提出的,但从未为 C++ 标准提案而绘制。

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


However, is there a way to execute the bar() function in a separate process?

最简单的选择是回退到 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

关于c++ - C++ 标准是否支持进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35300580/

相关文章:

c++ - 阅读通过 PuTTY 传递的低级鼠标点击 Unix

c++ - 没有默认构造函数的类 vector

c++ - 正确返回一个 unique_ptr

c++ - 您如何重新分配(也称为集合)unique_ptr 类成员?

c++ - C++的哨兵while循环

c++ - 在 C++ 中添加到指针的位置

c++ std::map获取最高键低于X的元素?

c++ - c++变量名中的北欧字符?

c++ - Eigen 3 - 切片 MatrixXd 以反转列顺序

c++ - cppcheck 找不到包含文件