コンソール プロセスをラップする Qt GUI アプリケーションがあります。QProcess を使用して起動し、その出力を QTextEdit に表示します。ただし、プロセスは.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 または Terminal から起動すると、どのような違いがありますか?