0

我有一个包装控制台进程的 Qt GUI 应用程序。我使用 QProcess 来启动它并在 QTextEdit 中显示它的输出。但是,我以一种特殊的方式(运行 shell)来执行此操作,因为该进程需要访问在 .bashrc 中导出的一些环境变量。此外,为了在 QTextEdit 窗口关闭时正确终止控制台进程,我将 GUI 进程的 pgid 设置为被调用控制台进程的 pid。

它是这样的:

process->start(getenv("SHELL"), QStringList() << "-i");
setpgid(process->pid(),0);
contentsWindow->setProcessPid(process->pid());

if (process->waitForStarted())
{
    connect(contentsWindow,SIGNAL(aboutToClose()),this,SLOT(terminateLaunch()));
    process->write("./yarprosbridge --from bridge_conf.ini --gui\n");
}

当我从 QtCreator 或 Nautilus 启动它时它工作正常,但是当我从终端启动它时出现问题。如果我删除setpgid指令,它工作正常。如果没有,QTextEdit 保持为空,但我没有收到任何错误(即使getpgid成功)并且 QProcess 的状态很好。

什么可能导致这种情况?如果我从 QtCreator 或从终端启动它会有什么不同?

4

0 回答 0