启动第二个 Linux 程序并从 C/C++ 退出当前程序?

Launching a second Linux program and exit current one from C/C++?

是否可以从 C 或 C++ Linux 程序(比如 /usr/bin/foo)以编程方式启动另一个程序(比如 /usr/bin/bar),然后让 foo 退出通常 bar 保持 运行ning?

system(3) 不合适,因为它会阻塞直到另一个程序完成。我想要立即 returns 的东西。

这两个程序都是 GUI 个程序,但我怀疑这不相关。

Qt 或 boost::process 中有什么可以帮助的吗?

是否有任何通用的 Linux 包装程序我可以 运行 到 system(3) 来实现这个?我试过 xdg-open,但我认为这不对。

基本上我希望第二个程序与第一个程序“分离”,就像用户通过系统启动它一样 UI。 (例如,在 MacOS 上,有一个 open 命令,所以它就像 system("open /usr/bin/bar")

使用 Qt,您可以按照此处所述使用 bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = nullptr) https://doc.qt.io/qt-5/qprocess.html#startDetached

这里是如何使用它的一个最小示例:

#include <QCoreApplication>
#include <QProcess>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    /*
     * starting netstat with args
     * in case the main event loop is exited
     * netstat will be parented to init ( pid 1 ) and continue running
     */
    QProcess::startDetached("/bin/netstat", QStringList() << "-pla" << "-ntuc");

    return a.exec();
}

经典方法是使用 Fork-Exec:https://en.wikipedia.org/wiki/Fork%E2%80%93exec 它在任何派生的 Unix OS 中都可用,包括 Linux。无需添加任何库、框架等