sig
  type t = Process.t
  val pid : t -> Core.Std.Pid.t
  val stdin : t -> Writer.t
  val stdout : t -> Reader.t
  val stderr : t -> Reader.t
  type env =
      [ `Extend of (string * string) list
      | `Replace of (string * string) list ]
  type 'a with_create_args =
      ?working_dir:string ->
      ?env:env -> prog:string -> args:string list -> unit -> 'a
  val create : t Core.Std.Or_error.t Import.Deferred.t with_create_args
  module Output :
    sig
      type t =
        Process.Output.t = {
        stdout : string;
        stderr : string;
        exit_status : Core.Std.Unix.Exit_or_signal.t;
      }
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  val wait : t -> Output.t Import.Deferred.t
  val run : string Core.Std.Or_error.t Import.Deferred.t with_create_args
  val run_lines :
    string list Core.Std.Or_error.t Import.Deferred.t with_create_args
  val sexp_of_t : t -> Sexplib.Sexp.t
  val env_of_sexp : Sexplib.Sexp.t -> env
  val __env_of_sexp__ : Sexplib.Sexp.t -> env
  val sexp_of_env : env -> Sexplib.Sexp.t
end