code: function forkProc(cwd, cmd, args, cb) {
      var env = process.env
      if (typeof(cwd) === 'object') {
        cb = cmd
        var cmd = cwd.cmd
        var args = cwd.args
        // Merge/override any variables
        mergeObj(cwd.env, env)
        cwd = cwd.cwd
      }
      if (typeof(cmd) === 'string' && typeof(args) === 'function') {
        var split = cmd.split(/\s+/)
        cmd = split[0]
        cb = args
        args = split.slice(1)
      }
      var proc = spawn(cmd, args, {cwd: cwd, env: env})
  
      // per-process output buffers
      proc.stderrBuffer = ""
      proc.stdoutBuffer = ""
      proc.stdmergedBuffer = ""
  
      proc.stdout.setEncoding('utf8')
      proc.stderr.setEncoding('utf8')
  
      proc.stdout.on('data', function(buf) {
        proc.stdoutBuffer += buf
        proc.stdmergedBuffer += buf
        stdoutBuffer += buf
        stdmergedBuffer += buf
        updateStatus("deployUpdate" , {stdout:buf})
      })
  
      proc.stderr.on('data', function(buf) {
        proc.stderrBuffer += buf
        proc.stdmergedBuffer += buf
        stderrBuffer += buf
        stdmergedBuffer += buf
        updateStatus("deployUpdate", {stderr:buf})
      })
  
      proc.on('close', function(exitCode) {
        cb(exitCode)
      })
  
      return proc
    }
docs: forkProc(cwd, shell, cb) or forkProc(cwd, cmd, args, cb) or forkProc({opts}, cb)