0

コンソール プロセスをラップする 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 から起動すると、どのような違いがありますか?

4

0 に答える 0