从服务 linux c++ 打开应用程序
Posted
技术标签:
【中文标题】从服务 linux c++ 打开应用程序【英文标题】:Opening an application from service linux c++ 【发布时间】:2014-12-15 14:39:59 【问题描述】:我想从另一个应用程序 B 打开一个应用程序 A。通过打开它,我不想在 B 中打开它。我找到了很多从另一个应用程序中调用应用程序的方法。但是,我想做的是同时打开另一个(A)。我怎样才能做到这一点? fork() 和 exec() 似乎在 B 中打开 A。我正在为 Linux 和 Mac 开发代码。建议将不胜感激。谢谢。
【问题讨论】:
如果你想从命令提示符运行它们,只需写./A& ./B&
。
【参考方案1】:
在进程 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;
【讨论】:
以上是关于从服务 linux c++ 打开应用程序的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 linux 的服务器终端中打开 X11 应用程序?