gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:43 25 4
gpt4 key购买 nike

我想从另一个应用程序 B 打开应用程序 A。通过打开它,我不想在 B 中打开它。我发现了很多从另一个应用程序中调用应用程序的方法。然而,我想做的是同时打开另一个(A)。我怎样才能实现这个目标? fork() 和 exec() 似乎在 B 中打开 A。我正在为 Linux 和 Mac 开发代码。如有建议,我们将不胜感激。谢谢。

最佳答案

在进程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;
}

关于c++ - 从服务 linux c++ 打开应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27486484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com