QProcess和setpgid

时间:2013-07-08 14:09:14

标签: c++ qt posix pid qprocess

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

0 个答案:

没有答案