sig
  module Exit_code :
    sig
      type t = [ `Exited of int | `Signaled of int | `Stopped of int ]
      val to_string : Ketrew.Unix_process.Exit_code.t -> string
      val to_log :
        Ketrew.Unix_process.Exit_code.t ->
        Ketrew_pure.Internal_pervasives.Log.t
    end
  val exec :
    ?bin:string ->
    string list ->
    (string * string * Ketrew.Unix_process.Exit_code.t,
     [> `Process of [> `Exec of string * string list ] * [> `Exn of exn ] ])
    Unix_io.Deferred_result.t
  val succeed :
    ?bin:string ->
    string list ->
    (string * string,
     [> `Process of
          [> `Exec of string * string list ] *
          [> `Exn of exn | `Non_zero of string ] ])
    Unix_io.Deferred_result.t
  val error_to_string :
    [< `Process of
         [< `Exec of string * string list ] *
         [< `Exn of exn | `Non_zero of string ] ] ->
    string
end