diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index 237e850cfb572b7898913241e2478281b77109b1..80c49b55646eeb20bc9f5dc83fa8c21309743568 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -249,15 +249,13 @@ static int extractPid(const QString &exeName, const QByteArray &psOutput)
 
 QByteArray AndroidRunner::runPs()
 {
-    QProcess psProc;
-    QStringList args = m_selector;
-    args << _("shell") << _("ps");
+    QByteArray psLine("ps");
     if (m_isBusyBox)
-        args << _("-w");
-
-    psProc.start(m_adb, args);
-    psProc.waitForFinished();
-    return psProc.readAll();
+        psLine += " -w";
+    psLine += '\n';
+    m_psProc.write(psLine);
+    m_psProc.waitForBytesWritten(psLine.size());
+    return m_psProc.readAllStandardOutput();
 }
 
 void AndroidRunner::checkPID()
@@ -322,6 +320,7 @@ void AndroidRunner::forceStop()
 void AndroidRunner::start()
 {
     m_adbLogcatProcess.start(m_adb, selector() << _("logcat"));
+    m_psProc.start(m_adb, selector() << _("shell"));
     Utils::runAsync(&AndroidRunner::asyncStart, this);
 }
 
@@ -551,6 +550,8 @@ void AndroidRunner::stop()
     //QObject::disconnect(&m_adbLogcatProcess, 0, this, 0);
     m_adbLogcatProcess.kill();
     m_adbLogcatProcess.waitForFinished();
+    m_psProc.kill();
+    m_psProc.waitForFinished();
     foreach (const QStringList &entry, m_androidRunnable.afterFinishADBCommands) {
         QProcess adb;
         adb.start(m_adb, selector() << entry);
diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h
index 84ae0c69ee37032ac7feae44ff94b774df1a4dce..32f7418ad9e2b4e6e973e0c83531a822bd499986 100644
--- a/src/plugins/android/androidrunner.h
+++ b/src/plugins/android/androidrunner.h
@@ -92,6 +92,7 @@ private:
 
 private:
     QProcess m_adbLogcatProcess;
+    QProcess m_psProc;
     QTimer m_checkPIDTimer;
     bool m_wasStarted;
     int m_tries;