2

是否可以从 C 或 C++ Linux 程序(例如/usr/bin/foo)以编程方式启动另一个程序(例如/usr/bin/bar),并foo正常退出并bar继续运行?

system(3)不适合,因为它会阻塞直到其他程序完成。我想要立即返回的东西。

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

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

有没有我可以运行的通用 Linux 包装程序system(3)来实现这一点?我试过xdg-open了,但我不认为这是正确的。

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

4

2 回答 2

1

使用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();
}
于 2020-12-02T21:33:03.797 回答
1

经典的方法是使用 Fork-Exec:https ://en.wikipedia.org/wiki/Fork%E2%80%93exec ,它适用于任何 Unix 衍生操作系统,包括 Linux。无需添加任何库、框架等。

于 2020-12-03T02:16:38.103 回答