sig
  type command = string * string array
  val shell : string -> Lwt_process.command
  val exec :
    ?env:string array -> Lwt_process.command -> Unix.process_status Lwt.t
  val pread : ?env:string array -> Lwt_process.command -> string Lwt.t
  val pread_chars :
    ?env:string array -> Lwt_process.command -> char Lwt_stream.t
  val pread_line : ?env:string array -> Lwt_process.command -> string Lwt.t
  val pread_lines :
    ?env:string array -> Lwt_process.command -> string Lwt_stream.t
  val pwrite :
    ?env:string array -> Lwt_process.command -> string -> unit Lwt.t
  val pwrite_chars :
    ?env:string array ->
    Lwt_process.command -> char Lwt_stream.t -> unit Lwt.t
  val pwrite_line :
    ?env:string array -> Lwt_process.command -> string -> unit Lwt.t
  val pwrite_lines :
    ?env:string array ->
    Lwt_process.command -> string Lwt_stream.t -> unit Lwt.t
  val pmap :
    ?env:string array -> Lwt_process.command -> string -> string Lwt.t
  val pmap_chars :
    ?env:string array ->
    Lwt_process.command -> char Lwt_stream.t -> char Lwt_stream.t
  val pmap_line :
    ?env:string array -> Lwt_process.command -> string -> string Lwt.t
  val pmap_lines :
    ?env:string array ->
    Lwt_process.command -> string Lwt_stream.t -> string Lwt_stream.t
  class process_none :
    ?env:string array ->
    Lwt_process.command ->
    object method close : Unix.process_status Lwt.t method pid : int end
  val open_process_none :
    ?env:string array -> Lwt_process.command -> Lwt_process.process_none
  val with_process_none :
    ?env:string array ->
    Lwt_process.command -> (Lwt_process.process_none -> 'Lwt.t) -> 'Lwt.t
  class process_in :
    ?env:string array ->
    Lwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method pid : int
      method stdout : Lwt_io.input_channel
    end
  val open_process_in :
    ?env:string array -> Lwt_process.command -> Lwt_process.process_in
  val with_process_in :
    ?env:string array ->
    Lwt_process.command -> (Lwt_process.process_in -> 'Lwt.t) -> 'Lwt.t
  class process_out :
    ?env:string array ->
    Lwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method pid : int
      method stdin : Lwt_io.output_channel
    end
  val open_process_out :
    ?env:string array -> Lwt_process.command -> Lwt_process.process_out
  val with_process_out :
    ?env:string array ->
    Lwt_process.command -> (Lwt_process.process_out -> 'Lwt.t) -> 'Lwt.t
  class process :
    ?env:string array ->
    Lwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method pid : int
      method stdin : Lwt_io.output_channel
      method stdout : Lwt_io.input_channel
    end
  val open_process :
    ?env:string array -> Lwt_process.command -> Lwt_process.process
  val with_process :
    ?env:string array ->
    Lwt_process.command -> (Lwt_process.process -> 'Lwt.t) -> 'Lwt.t
  class process_full :
    ?env:string array ->
    Lwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method pid : int
      method stderr : Lwt_io.input_channel
      method stdin : Lwt_io.output_channel
      method stdout : Lwt_io.input_channel
    end
  val open_process_full :
    ?env:string array -> Lwt_process.command -> Lwt_process.process_full
  val with_process_full :
    ?env:string array ->
    Lwt_process.command -> (Lwt_process.process_full -> 'Lwt.t) -> 'Lwt.t
end