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