diff --git a/includes/backend.inc b/includes/backend.inc
index 6a491a9..b9f5c5d 100644
--- a/includes/backend.inc
+++ b/includes/backend.inc
@@ -124,6 +124,13 @@ function drush_backend_get_result() {
  * encoded log records, context information, etc.
  */
 function drush_backend_output() {
+  // If the backend process is due to a fork only print output if verbose or
+  // debug flags set.
+  $backend_fork = drush_get_option('backend-fork', FALSE);
+  if ($backend_fork && !drush_get_option(array('verbose', 'debug'), FALSE)) {
+    exit;
+  }
+
   $data = array();
 
   if (drush_get_context('DRUSH_PIPE')) {
@@ -204,9 +211,14 @@ function drush_backend_output_discard($string) {
  */
 function drush_backend_packet($packet, $data) {
   if (drush_get_context('DRUSH_BACKEND')) {
-    $data['packet'] = $packet;
-    $data = json_encode($data);
-    drush_print(sprintf(DRUSH_BACKEND_PACKET_PATTERN, $data), 0, STDERR);
+    // If the backend process is due to a fork only print output if verbose or
+    // debug flags set.
+    $backend_fork = drush_get_option('backend-fork', FALSE);
+    if (($backend_fork && drush_get_option(array('verbose', 'debug'), FALSE)) || !$backend_fork) {
+      $data['packet'] = $packet;
+      $data = json_encode($data);
+      drush_print(sprintf(DRUSH_BACKEND_PACKET_PATTERN, $data), 0, STDERR);
+    }
     return TRUE;
   }
 
@@ -839,10 +851,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 .= ' --backend-fork &';
+      }
+      drush_log(dt("executing !cmd", array('!cmd' => $exec_cmd)));
+      $ret = drush_shell_proc_open($exec_cmd);
     }
     return $ret;
   }
