从服务linux c ++打开一个应用程序

时间:2014-12-15 14:40:00

标签: c++ linux macos

我想从另一个应用程序B打开一个应用程序A.通过打开它,我不想在B中打开它。我发现很多方法可以从另一个应用程序中调用它。但是,我想要做的是同时打开另一个(A)。我怎样才能做到这一点? fork()和exec()似乎在B中打开A.我正在为Linux和Mac开发代码。建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在流程A(父级)中调用fork()来创建流程A和B(子级)

在过程A中等待B退出...

在进程B中,再次调用fork()(创建B和C)并退出

这会导致A收集B的状态代码并防止它变成僵尸。

B的退出导致C成为孤儿,由init拥有,因此它不再是A的后代。

在流程C中,调用exec将当前流程中的程序替换为您想要的程序。

类似的东西:

#include <iostream>
#include <unistd.h>
#include <cassert>

using namespace std;

void forkBtoC()
{
    cout << "B forking" << endl;
    auto child = fork();
    if (0 == child) {
        cout << "C execing" << endl;
        execl("your-program-here", "arg1", "arg2", nullptr);
    }
    else {
    }
}

int main()
{
    // I am parent A
    cout << "A forking" << endl;
    auto result = fork();
    if (result == 0) {
        setsid();
        forkBtoC();
        // I am child B
    }
    else if (result > 0) {
        // I am parent A. result is the pid of B
        int B_code = 0;
        waitpid(result, &B_code, 0);
        cout << "B returned " << B_code << endl;
    }
    else {
        assert(!"failed to fork A");
    }

    return 0;
}