forked from qt-creator/qt-creator
Use Qt 6.7's QProcess::UnixProcessFlag::CreateNewSession
Allow QProcess to do the setsid() call for us. Unfortunately, the nice()-setting feature wasn't approved, so we need to keep the modifier for that. Change-Id: Icfe44ecf285a480fafe4fffd174d111b806eb3a8 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -82,9 +82,13 @@ void LauncherInterfacePrivate::doStart()
|
|||||||
connect(m_process, &QProcess::readyReadStandardError,
|
connect(m_process, &QProcess::readyReadStandardError,
|
||||||
this, &LauncherInterfacePrivate::handleProcessStderr);
|
this, &LauncherInterfacePrivate::handleProcessStderr);
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
|
# if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
||||||
|
m_process->setUnixProcessParameters(QProcess::UnixProcessFlag::CreateNewSession);
|
||||||
|
# else
|
||||||
m_process->setChildProcessModifier([] {
|
m_process->setChildProcessModifier([] {
|
||||||
setpgid(0, 0);
|
setpgid(0, 0);
|
||||||
});
|
});
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_process->start(launcherFilePath(), QStringList(m_server->fullServerName()));
|
m_process->start(launcherFilePath(), QStringList(m_server->fullServerName()));
|
||||||
|
@@ -107,7 +107,17 @@ ProcessHelper::ProcessHelper(QObject *parent)
|
|||||||
: QProcess(parent), m_processStartHandler(this)
|
: QProcess(parent), m_processStartHandler(this)
|
||||||
{
|
{
|
||||||
#if defined(Q_OS_UNIX)
|
#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
|
// nice value range is -20 to +19 where -20 is highest, 0 default and +19 is lowest
|
||||||
if (m_lowPriority) {
|
if (m_lowPriority) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
@@ -116,7 +126,7 @@ ProcessHelper::ProcessHelper(QObject *parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Disable terminal by becoming a session leader.
|
// Disable terminal by becoming a session leader.
|
||||||
if (m_unixTerminalDisabled)
|
if (needSetsid)
|
||||||
setsid();
|
setsid();
|
||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user