我有一个包装控制台进程的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或终端发布它会以什么方式出现?