diff --git a/includes/backend.inc b/includes/backend.inc
index 45472f0..b78493a 100644
--- a/includes/backend.inc
+++ b/includes/backend.inc
@@ -858,10 +858,14 @@ function _drush_backend_invoke($cmds, $common_backend_options = array(), $contex
   foreach ($cmds as $cmd) {
     drush_log(dt('Backend invoke: !cmd', array('!cmd' => $cmd['cmd'])), 'command');
   }
-  if (array_key_exists('interactive', $common_backend_options)) {
+  if (array_key_exists('interactive', $common_backend_options) || array_key_exists('fork', $common_backend_options)) {
     foreach ($cmds as $cmd) {
-      drush_log(dt("executing !cmd", array('!cmd' => $cmd['cmd'])));
-      $ret = drush_shell_proc_open($cmd['cmd']);
+      $exec_cmd = $cmd['cmd'];
+      if (array_key_exists('fork', $common_backend_options)) {
+        $exec_cmd .= ' --quiet &';
+      }
+      drush_log(dt("executing !cmd", array('!cmd' => $exec_cmd)));
+      $ret = drush_shell_proc_open($exec_cmd);
     }
     return $ret;
   }
diff --git a/includes/command.inc b/includes/command.inc
index 621298c..397b93b 100644
--- a/includes/command.inc
+++ b/includes/command.inc
@@ -77,6 +77,12 @@ function drush_invoke($command, $arguments = array()) {
  *        database information for sql-sync via sql-conf.
  *      'interactive'
  *        Overrides the backend invoke process to run commands interactively.
+ *      'fork'
+ *        Overrides the backend invoke process to run non blocking commands in 
+ *        the background. Forks a new process by adding a '&' at the end of the 
+ *        command. The calling process does not receive any output from the child 
+ *        process. The fork option is used to spawn a process that outlives its
+ *        parent.
  *
  * @return
  *   If the command could not be completed successfully, FALSE.
diff --git a/tests/backendTest.php b/tests/backendTest.php
index febfa34..561f417 100644
--- a/tests/backendTest.php
+++ b/tests/backendTest.php
@@ -149,3 +149,33 @@ class backendCase extends Drush_CommandTestCase {
 )", var_export($parsed['object'], TRUE));
   }
 }
+
+class backendUnitCase extends Drush_UnitTestCase {
+
+  /**
+   * Covers the following target responsibilities.
+   *   - Insures that drush_invoke_process called with fork backend set is able
+   *     to invoke a non-blocking process.
+   */
+  function testBackendFork() {
+    // Need to set DRUSH_COMMAND so that drush will be called and not phpunit
+    define('DRUSH_COMMAND', UNISH_DRUSH);
+
+    // Ensure that file that will be created by forked process does not exist
+    // before invocation.
+    $test_file = UNISH_SANDBOX . '/fork_test.txt';
+    if (file_exists($test_file)) {
+      unlink($test_file);
+    }
+
+    $ev_php = "sleep(1);fopen('$test_file','a');";
+    drush_invoke_process("@none", "ev", array($ev_php), array(), array("fork" => TRUE));
+
+    // Test file does not exist immediate after process forked
+    $this->assertEquals(file_exists($test_file), FALSE);
+
+    sleep(2);
+    // Test file exists after waiting long enough
+    $this->assertEquals(file_exists($test_file), TRUE);
+  }
+}
