c++ - 在新进程中运行方法并等待它们完成

标签 c++ linux process createprocess

我需要我的应用程序能够在新进程下运行一些方法,并且理想情况下能够从这些方法中获取返回值,但是我还没有找到如何做到这一点(我的 C++ 知识非常基础) .

为了更好地解释,假设我有方法 A、A1 和 A2。方法 A 将开始执行,并在某个时刻它将:

  1. 在新进程下运行方法 A1
  2. 等待A1完成并可能获得返回值
  3. 在另一个新进程下运行方法A2
  4. 等待A2完成,再次获取返回值
  5. 继续在原进程下运行代码

我发现我可以使用fork()在子进程中运行代码,但这不符合我的需求,因为它似乎是创建父进程的拷贝,而不仅仅是运行我只想要新进程中的特定代码。这是我尝试过的摘录,我不确定是否可以对其进行修改以实现我想要的功能,或者我是否应该完全使用其他东西:

int main(){
    std::cout << "START" << std::endl;

    test1();
    test2();

    std::cout << "FINISH" << std::endl;
    return 0;
}

void test1(){
        pid_t pid = fork();

        if (pid == 0){
            int i = 0;
            for (; i < 5; ++i) {
                std::cout << "Test 1 " << std::endl;
            }
        }
    }

void test2(){
        pid_t pid = fork();

        if (pid == 0){
            int i = 0;
            for (; i < 5; ++i) {
                std::cout << "Test 2 " << std::endl;
            }
        }
    }

然而,这会导致 test2() 被执行两次,并且由于父进程被复制到子进程,FINISH 被打印了 4 次。

目前我正在 Linux 上执行此操作,但最终我需要在 Windows 上执行相同的操作。

最佳答案

首先你的父进程应该 wait让子进程退出。

那么你的子进程应该 exit一旦完成,否则这些函数将在子进程和父进程上返回。

关于c++ - 在新进程中运行方法并等待它们完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769976/

相关文章:

C++ 类、隐式转换和运算符重载

c++ - 逐个字符地遍历字符串

c++ - opencv中acos函数错误

java - 等待 Java 进程的答复?

C++98 : Provide different function implementations, 取决于成员的存在

用于构建类和函数字符串的 C++ 可移植方法

c++ - mariadb 多平台项目

linux - 文件中的 Ansible 取消注释行

c# - 以管理员身份启动进程,不使用 UseShellExecute?

C 中的命令行参数和读取文件/打印文本