Qt QProcess startDetached 无法结束进程(bash 会话)

Qt QProcess startDetached can't end process (bash session)

本文关键字:bash 会话 进程 结束 QProcess startDetached Qt      更新时间:2023-10-16

我试图从Qt GUI调用一个shell脚本,但在运行该脚本后,bash会话在应该结束时保持打开状态。

有这个代码:

QString s = "./script.sh " + argument;
qint64 *pid = NULL;
QProcess process;
process.startDetached("/bin/bash", QStringList() << "-c" << s, NULL, pid);
bool finished = process.waitForFinished(-1);
std::cout << "ended";

因此,在运行脚本后,它期望输入一个命令,我可以放置任何命令,它会执行它。问题是,在我输入命令之前,它永远不会完成。

我还尝试修改s变量,如下所示:

QString s = "./script.sh " + argument + " ;exit";

希望它能结束bash会话,但什么也没发生。

如果不是使用函数startDetached,而是使用start,那么它确实会在没有;exit命令的情况下关闭bash会话。

希望有人知道如何解决或变通!

startDetached()是一个静态方法;您启动了一个新进程,但它不是由process对象表示的。

当你等待process完成时,它将永远等待,因为process从未启动过。

试试类似的东西:

process.start("/bin/bash", QStringList() << "-c" << s);
bool finished = process.waitForFinished(-1);

您可能希望在start()之前重定向I/O。