sig
  type producer = string JoinCom.P.t
  type t = {
    out : JoinTextProc.Async.producer;
    err : JoinTextProc.Async.producer;
    waitpid : Unix.process_status Join.chan Join.chan;
    kill : int -> unit;
    gkill : int -> unit;
  }
  val command : string -> string array -> JoinTextProc.Async.t
  val open_in : string -> string array -> JoinTextProc.Async.t
  val open_out :
    string ->
    string array -> JoinTextProc.Async.producer -> JoinTextProc.Async.t
  val open_in_out :
    string ->
    string array -> JoinTextProc.Async.producer -> JoinTextProc.Async.t
  val open_full :
    string ->
    string array -> JoinTextProc.Async.producer -> JoinTextProc.Async.t
end