diff --git a/src/plugins/remotelinux/remotelinuxprocesslist.cpp b/src/plugins/remotelinux/remotelinuxprocesslist.cpp index 139a2dc83c7549c59fcc55c513ca55a8025bceaa..3286799ff61a61967b02e40ecb794e3e2334ecf3 100644 --- a/src/plugins/remotelinux/remotelinuxprocesslist.cpp +++ b/src/plugins/remotelinux/remotelinuxprocesslist.cpp @@ -44,7 +44,7 @@ namespace RemoteLinux { namespace Internal { namespace { enum State { Inactive, Listing, Killing }; -const char Delimiter[] = "-----"; +const char Delimiter[] = "x-----"; } // anonymous namespace class AbstractRemoteLinuxProcessListPrivate @@ -176,8 +176,10 @@ void AbstractRemoteLinuxProcessList::handleRemoteProcessFinished(int exitStatus) break; case SshRemoteProcess::ExitedNormally: if (d->process->process()->exitCode() == 0) { - if (d->state == Listing) - d->remoteProcesses = buildProcessList(QString::fromUtf8(d->remoteStdout)); + if (d->state == Listing) { + d->remoteProcesses = buildProcessList(QString::fromUtf8(d->remoteStdout.data(), + d->remoteStdout.count())); + } } else { d->errorMsg = tr("Remote process failed."); } @@ -232,7 +234,8 @@ GenericRemoteLinuxProcessList::GenericRemoteLinuxProcessList(const LinuxDeviceCo QString GenericRemoteLinuxProcessList::listProcessesCommandLine() const { return QString::fromLocal8Bit("for dir in `ls -d /proc/[0123456789]*`; " - "do echo $dir%1`cat $dir/cmdline`%1`cat $dir/stat`; done").arg(Delimiter); + "do printf \"${dir}%1\";cat $dir/cmdline; printf '%1';cat $dir/stat;printf '\\n'; done") + .arg(Delimiter); } QString GenericRemoteLinuxProcessList::killProcessCommandLine(const RemoteProcess &process) const @@ -243,7 +246,7 @@ QString GenericRemoteLinuxProcessList::killProcessCommandLine(const RemoteProces QList<AbstractRemoteLinuxProcessList::RemoteProcess> GenericRemoteLinuxProcessList::buildProcessList(const QString &listProcessesReply) const { QList<RemoteProcess> processes; - const QStringList &lines = listProcessesReply.split(QLatin1Char('\n')); + const QStringList &lines = listProcessesReply.split(QLatin1Char('\n'), QString::SkipEmptyParts); foreach (const QString &line, lines) { const QStringList elements = line.split(QString::fromLocal8Bit(Delimiter)); if (elements.count() < 3) { @@ -257,6 +260,7 @@ QList<AbstractRemoteLinuxProcessList::RemoteProcess> GenericRemoteLinuxProcessLi continue; } QString command = elements.at(1); + command.replace(QLatin1Char('\0'), QLatin1Char(' ')); if (command.isEmpty()) { const QString &statString = elements.at(2); const int openParenPos = statString.indexOf(QLatin1Char('('));