aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2017-03-21 16:50:06 +0100
committerUlf Hermann <ulf.hermann@qt.io>2017-03-22 13:56:10 +0000
commita985521b39a947f293f070e3d321bd436a391e00 (patch)
treee4e8450fa32b6f2320216d98c2dadb20e692db49 /src/plugins/remotelinux/remotelinuxsignaloperation.cpp
parent2092d576765eedf67f476481de4b01c748cb857e (diff)
RemoteLinux: Always kill the whole process group
This way we can get rid of processes spawned from an initial shell, e.g. in case of the perf profiler. Also, if your target application spawns additional processes, we probably want to kill those. The kill -pgid only works if the target application is actually the process group leader. So, in case it isn't, also kill it individually by pid. Change-Id: Ifcaf3764d21281c3cac107419f84f6bc527854da Task-number: QCE-91 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/remotelinux/remotelinuxsignaloperation.cpp')
-rw-r--r--src/plugins/remotelinux/remotelinuxsignaloperation.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
index 7c71c3c143..b59118b4aa 100644
--- a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
+++ b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
@@ -49,9 +49,9 @@ RemoteLinuxSignalOperation::~RemoteLinuxSignalOperation()
}
}
-static QString signalProcessByPidCommandLine(qint64 pid, int signal)
+static QString signalProcessGroupByPidCommandLine(qint64 pid, int signal)
{
- return QString::fromLatin1("kill -%1 %2").arg(signal).arg(pid);
+ return QString::fromLatin1("kill -%1 -- -%2 %2").arg(signal).arg(pid);
}
void RemoteLinuxSignalOperation::run(const QString &command)
@@ -72,32 +72,32 @@ void RemoteLinuxSignalOperation::finish()
emit finished(m_errorMessage);
}
-static QString signalProcessByNameCommandLine(const QString &filePath, int signal)
+static QString signalProcessGroupByNameCommandLine(const QString &filePath, int signal)
{
return QString::fromLatin1(
"cd /proc; for pid in `ls -d [0123456789]*`; "
"do "
"if [ \"`readlink /proc/$pid/exe`\" = \"%1\" ]; then "
- " kill -%2 $pid;"
+ " kill -%2 -- -$pid $pid;"
"fi; "
"done").arg(filePath).arg(signal);
}
QString RemoteLinuxSignalOperation::killProcessByNameCommandLine(const QString &filePath) const
{
- return QString::fromLatin1("%1; %2").arg(signalProcessByNameCommandLine(filePath, 15),
- signalProcessByNameCommandLine(filePath, 9));
+ return QString::fromLatin1("%1; %2").arg(signalProcessGroupByNameCommandLine(filePath, 15),
+ signalProcessGroupByNameCommandLine(filePath, 9));
}
QString RemoteLinuxSignalOperation::interruptProcessByNameCommandLine(const QString &filePath) const
{
- return signalProcessByNameCommandLine(filePath, 2);
+ return signalProcessGroupByNameCommandLine(filePath, 2);
}
void RemoteLinuxSignalOperation::killProcess(qint64 pid)
{
- run(QString::fromLatin1("%1; sleep 1; %2").arg(signalProcessByPidCommandLine(pid, 15),
- signalProcessByPidCommandLine(pid, 9)));
+ run(QString::fromLatin1("%1; sleep 1; %2").arg(signalProcessGroupByPidCommandLine(pid, 15),
+ signalProcessGroupByPidCommandLine(pid, 9)));
}
void RemoteLinuxSignalOperation::killProcess(const QString &filePath)
@@ -107,7 +107,7 @@ void RemoteLinuxSignalOperation::killProcess(const QString &filePath)
void RemoteLinuxSignalOperation::interruptProcess(qint64 pid)
{
- run(signalProcessByPidCommandLine(pid, 2));
+ run(signalProcessGroupByPidCommandLine(pid, 2));
}
void RemoteLinuxSignalOperation::interruptProcess(const QString &filePath)