【发布时间】:2021-03-14 13:30:57
【问题描述】:
是否可以从 C 或 C++ Linux 程序(例如 /usr/bin/foo)以编程方式启动另一个程序(例如 /usr/bin/bar),并让 foo 正常退出并让 bar 继续运行?
system(3) 不适合,因为它会阻塞直到其他程序完成。我想要立即返回的东西。
这些程序都是 GUI 程序,但我怀疑这不相关。
Qt 或 boost::process 中有什么可以提供帮助的吗?
有没有我可以通过system(3) 运行的通用 Linux 包装程序来实现这一点?我试过xdg-open,但我不认为这是正确的。
基本上,我希望第二个程序与第一个程序“分离”,并且表现得就像用户通过系统 UI 启动它一样。 (例如在 MacOS 上,有一个open 命令,所以它就像system("open /usr/bin/bar"))
【问题讨论】:
-
fork()和execv()的组合通常是这样完成的。或者,你可以system()和&最后在后台运行,但这很讨厌。 -
既然你提到了
boost::process,你可能想看看boost::process::spawn或boost::process::child类,它允许你在detaching 它之前设置和创建一个子进程。跨度> -
既然你提到了Qt,那么
QProcess::start就是这样做的。 -
@rustyx:当以
QProcess::start开始的进程继续运行时,我们确定父进程可以退出吗? -
@rustyx:也许
QProcess::startDetached看起来是对的。
标签: c++ c linux qt boost-process