sig
  type command = string * string array
  val shell : string -> Uwt_process.command
  type redirection =
      [ `Close
      | `Dev_null
      | `FD_copy of Unix.file_descr
      | `FD_move of Unix.file_descr
      | `File_copy of Uwt.file
      | `File_move of Uwt.file
      | `Keep
      | `Pipe_copy of Uwt.Pipe.t
      | `Pipe_move of Uwt.Pipe.t
      | `Stream_copy of Uwt.Stream.t
      | `Stream_move of Uwt.Stream.t ]
  val exec :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> Unix.process_status Lwt.t
  val pread :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection -> Uwt_process.command -> string Lwt.t
  val pread_chars :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> char Lwt_stream.t
  val pread_line :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection -> Uwt_process.command -> string Lwt.t
  val pread_lines :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string Lwt_stream.t
  val pwrite :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string -> unit Lwt.t
  val pwrite_chars :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> char Lwt_stream.t -> unit Lwt.t
  val pwrite_line :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string -> unit Lwt.t
  val pwrite_lines :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string Lwt_stream.t -> unit Lwt.t
  val pmap :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string -> string Lwt.t
  val pmap_chars :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> char Lwt_stream.t -> char Lwt_stream.t
  val pmap_line :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string -> string Lwt.t
  val pmap_lines :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> string Lwt_stream.t -> string Lwt_stream.t
  type state = Running | Exited of Unix.process_status
  class process_none :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method kill : int -> unit
      method pid : int
      method state : Uwt_process.state
      method status : Unix.process_status Lwt.t
      method terminate : unit
    end
  val open_process_none :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> Uwt_process.process_none
  val with_process_none :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> (Uwt_process.process_none -> 'Lwt.t) -> 'Lwt.t
  class process_in :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method kill : int -> unit
      method pid : int
      method state : state
      method status : Unix.process_status Lwt.t
      method stdout : Uwt_io.input_channel
      method terminate : unit
    end
  val open_process_in :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> Uwt_process.process_in
  val with_process_in :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdin:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> (Uwt_process.process_in -> 'Lwt.t) -> 'Lwt.t
  class process_out :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method kill : int -> unit
      method pid : int
      method state : state
      method status : Unix.process_status Lwt.t
      method stdin : Uwt_io.output_channel
      method terminate : unit
    end
  val open_process_out :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> Uwt_process.process_out
  val with_process_out :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stdout:Uwt_process.redirection ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> (Uwt_process.process_out -> 'Lwt.t) -> 'Lwt.t
  class process :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method kill : int -> unit
      method pid : int
      method state : state
      method status : Unix.process_status Lwt.t
      method stdin : Uwt_io.output_channel
      method stdout : Uwt_io.input_channel
      method terminate : unit
    end
  val open_process :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> Uwt_process.process
  val with_process :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    ?stderr:Uwt_process.redirection ->
    Uwt_process.command -> (Uwt_process.process -> 'Lwt.t) -> 'Lwt.t
  class process_full :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    Uwt_process.command ->
    object
      method close : Unix.process_status Lwt.t
      method kill : int -> unit
      method pid : int
      method state : state
      method status : Unix.process_status Lwt.t
      method stderr : Uwt_io.input_channel
      method stdin : Uwt_io.output_channel
      method stdout : Uwt_io.input_channel
      method terminate : unit
    end
  val open_process_full :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string -> Uwt_process.command -> Uwt_process.process_full
  val with_process_full :
    ?timeout:float ->
    ?uid:int ->
    ?gid:int ->
    ?env:string array ->
    ?cwd:string ->
    Uwt_process.command -> (Uwt_process.process_full -> 'Lwt.t) -> 'Lwt.t
end