diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index c9128ba4ac7f95c136b33a2a87eeb9e42a21e8b3..18e24bce510b1b843a4e26558339e8ebb35a6717 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1279,18 +1279,25 @@ void GitClient::launchGitK(const QString &workingDirectory)
     const QStringList arguments;
 #endif
     outwin->appendCommand(workingDirectory, binary, arguments);
-    // This should use QProcess::startDetached ideally, but that does not have
-    // an environment parameter.
-    QProcess *process = new QProcess(this);
-    process->setWorkingDirectory(workingDirectory);
-    process->setProcessEnvironment(env);
-    process->start(binary, arguments);
-    if (!process->waitForStarted()) {
-        outwin->appendError(tr("Unable to launch %1.").arg(binary));
-        delete process;
-        return;
+    // This should always use QProcess::startDetached (as not to kill
+    // the child), but that does not have an environment parameter.
+    bool success = false;
+    if (m_settings.adoptPath) {
+        QProcess *process = new QProcess(this);
+        process->setWorkingDirectory(workingDirectory);
+        process->setProcessEnvironment(env);
+        process->start(binary, arguments);
+        success = process->waitForStarted();
+        if (success) {
+            connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
+        } else {
+            delete process;
+        }
+    } else {
+        success = QProcess::startDetached(binary, arguments, workingDirectory);
     }
-    connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
+    if (!success)
+        outwin->appendError(tr("Unable to launch %1.").arg(binary));
 }
 
 bool GitClient::getCommitData(const QString &workingDirectory,