diff --git a/src/plugins/madde/maemosshrunner.cpp b/src/plugins/madde/maemosshrunner.cpp index c698d8b635f..22b2c5e634c 100644 --- a/src/plugins/madde/maemosshrunner.cpp +++ b/src/plugins/madde/maemosshrunner.cpp @@ -212,24 +212,6 @@ void MaemoSshRunner::unmount() } } -QString MaemoSshRunner::killApplicationCommandLine() const -{ - // Prevent pkill from matching our own pkill call. - QString pkillArg = remoteExecutable(); - const int lastPos = pkillArg.count() - 1; - pkillArg.replace(lastPos, 1, QLatin1Char('[') + pkillArg.at(lastPos) + QLatin1Char(']')); - - // Fremantle's busybox configuration is strange. - const char *killTemplate; - if (devConfig()->osType() == QLatin1String(Maemo5OsType)) - killTemplate = "pkill -f -%2 %1"; - else - killTemplate = "pkill -%2 -f %1"; - const QString niceKill = QString::fromLocal8Bit(killTemplate).arg(pkillArg).arg("SIGTERM"); - const QString brutalKill = QString::fromLocal8Bit(killTemplate).arg(pkillArg).arg("SIGKILL"); - return niceKill + QLatin1String("; sleep 1; ") + brutalKill; -} - } // namespace Internal } // namespace Madde diff --git a/src/plugins/madde/maemosshrunner.h b/src/plugins/madde/maemosshrunner.h index e91c78f678e..f902e0e1258 100644 --- a/src/plugins/madde/maemosshrunner.h +++ b/src/plugins/madde/maemosshrunner.h @@ -65,7 +65,6 @@ private: void doAdditionalInitializations(); void doPostRunCleanup(); void doAdditionalConnectionErrorHandling(); - QString killApplicationCommandLine() const; void mount(); void unmount(); diff --git a/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp b/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp index 314986e2bee..72c0c754621 100644 --- a/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp +++ b/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp @@ -450,6 +450,17 @@ void AbstractRemoteLinuxApplicationRunner::handlePostRunCleanupDone() emit error(tr("Error running remote process: %1").arg(d->runner->errorString())); } +QString AbstractRemoteLinuxApplicationRunner::killApplicationCommandLine() const +{ + return QString::fromLocal8Bit("cd /proc; for pid in `ls -d [0123456789]*`; " + "do " + "if [ \"`readlink /proc/$pid/exe`\" = \"%1\" ]; then " + " kill $pid; sleep 1; kill -9 $pid; " + "fi; " + "done").arg(remoteExecutable()); +} + + const qint64 AbstractRemoteLinuxApplicationRunner::InvalidExitCode = std::numeric_limits::min(); @@ -488,18 +499,5 @@ void GenericRemoteLinuxApplicationRunner::doAdditionalConnectionErrorHandling() { } -QString GenericRemoteLinuxApplicationRunner::killApplicationCommandLine() const -{ - // Prevent pkill from matching our own pkill call. - QString pkillArg = remoteExecutable(); - const int lastPos = pkillArg.count() - 1; - pkillArg.replace(lastPos, 1, QLatin1Char('[') + pkillArg.at(lastPos) + QLatin1Char(']')); - - const char * const killTemplate = "pkill -%2 -f %1"; - const QString niceKill = QString::fromLocal8Bit(killTemplate).arg(pkillArg).arg("SIGTERM"); - const QString brutalKill = QString::fromLocal8Bit(killTemplate).arg(pkillArg).arg("SIGKILL"); - return niceKill + QLatin1String("; sleep 1; ") + brutalKill; -} - } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxapplicationrunner.h b/src/plugins/remotelinux/remotelinuxapplicationrunner.h index 937201c884f..5fb7f529756 100644 --- a/src/plugins/remotelinux/remotelinuxapplicationrunner.h +++ b/src/plugins/remotelinux/remotelinuxapplicationrunner.h @@ -105,7 +105,7 @@ private slots: private: - virtual QString killApplicationCommandLine() const = 0; + virtual QString killApplicationCommandLine() const; // Implement to do custom setup of the device *before* connecting. // Call handleDeviceSetupDone() afterwards. @@ -145,9 +145,6 @@ protected: void doAdditionalInitializations(); void doPostRunCleanup(); void doAdditionalConnectionErrorHandling(); - -private: - QString killApplicationCommandLine() const; }; } // namespace RemoteLinux