diff --git a/src/libs/utils/launcherinterface.cpp b/src/libs/utils/launcherinterface.cpp index 218286521db..d188e224fc1 100644 --- a/src/libs/utils/launcherinterface.cpp +++ b/src/libs/utils/launcherinterface.cpp @@ -82,9 +82,13 @@ void LauncherInterfacePrivate::doStart() connect(m_process, &QProcess::readyReadStandardError, this, &LauncherInterfacePrivate::handleProcessStderr); #ifdef Q_OS_UNIX +# if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + m_process->setUnixProcessParameters(QProcess::UnixProcessFlag::CreateNewSession); +# else m_process->setChildProcessModifier([] { setpgid(0, 0); }); +# endif #endif m_process->start(launcherFilePath(), QStringList(m_server->fullServerName())); diff --git a/src/libs/utils/processutils.cpp b/src/libs/utils/processutils.cpp index 62ea514b658..c5fc3d1ade7 100644 --- a/src/libs/utils/processutils.cpp +++ b/src/libs/utils/processutils.cpp @@ -107,7 +107,17 @@ ProcessHelper::ProcessHelper(QObject *parent) : QProcess(parent), m_processStartHandler(this) { #if defined(Q_OS_UNIX) - setChildProcessModifier([this] { + bool needSetsid = m_unixTerminalDisabled; +# if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + if (needSetsid) { + setUnixProcessParameters(QProcess::UnixProcessFlag::CreateNewSession); + needSetsid = false; + } +# endif + + if (!m_lowPriority && !needSetsid) + return; + setChildProcessModifier([=, this] { // nice value range is -20 to +19 where -20 is highest, 0 default and +19 is lowest if (m_lowPriority) { errno = 0; @@ -116,7 +126,7 @@ ProcessHelper::ProcessHelper(QObject *parent) } // Disable terminal by becoming a session leader. - if (m_unixTerminalDisabled) + if (needSetsid) setsid(); }); #endif