У меня есть приложение Qt GUI, которое упаковывает процесс консоли. Я использую QProcess для его запуска и отображения его результатов в QTextEdit. Однако я делаю это особым образом (запускаю оболочку), потому что процесс должен иметь доступ к некоторым переменным среды, которые экспортируются в .bashrc.
Кроме того, чтобы правильно завершить консольный процесс, когда окно QTextEdit закрыто, я установил pgid процесса GUI равным 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 или из терминала?
Задача ещё не решена.
Других решений пока нет …