docs: function createStream (tmpIn, tmpOut, callback) {
    var incoming = new stream.PassThrough()
    var outgoing = new stream.PassThrough()
    // input paramter of the child process
    var result = duplexMaker(incoming, outgoing)
    setTimeout(function () {
      inStream(incoming, tmpIn, function (err) {
        if (err) {
          result.emit('error', err)
        } else {
          callback.call(result, tmpIn || incoming, tmpOut || outgoing, function (err) {
            if (err) {
              result.emit('error', err)
              if (tmpIn) {
                fs.exists(tmpIn, function (exists) {
                  if (exists) {
                    fs.unlink(tmpIn)
                  }
                })
              }
              if (tmpOut) {
                fs.exists(tmpOut, function (exists) {
                  if (exists) {
                    fs.unlink(tmpOut)
                  }
                })
              }
              return
            }
            // tmpFile is not needed anymore
            if (tmpIn) {
              fs.unlink(tmpIn)
            }
            if (tmpOut) {
              fs.exists(tmpOut, function (exists) {
                if (exists) {
                  var out = fs.createReadStream(tmpOut)
                  out.pipe(outgoing)
                  out.on('end', function () {
                    fs.unlink(tmpOut)
                  })
                } else {
                  result.emit('error', new Error('Child process has not created the output-temp file'))
                }
              })
            }
          })
        }
      })
    })
    return result
  }