sig
  module Status :
    sig
      type t =
          [ `Exited of int
          | `Signaled of Core.Std.Signal.t
          | `Timeout of Core.Std.Time.Span.t ]
      val to_string : t -> string
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  module Command_result :
    sig
      type t =
        Process.Command_result.t = {
        status : Status.t;
        stdout_tail : string;
        stderr_tail : string;
      }
    end
  val kill :
    ?is_child:bool ->
    ?wait_for:Core.Std.Time.Span.t ->
    ?signal:Core.Std.Signal.t -> Core.Pid.t -> unit
  val run :
    ?timeout:Core.Std.Time.Span.t ->
    ?use_extra_path:bool ->
    ?working_dir:string ->
    ?setuid:int ->
    ?setgid:int ->
    ?env:[ `Extend of (string * string) list
         | `Replace of (string * string) list ] ->
    ?input:string ->
    ?keep_open:bool ->
    ?stdoutf:(string -> int -> unit) ->
    ?stderrf:(string -> int -> unit) ->
    ?tail_len:int ->
    prog:string -> args:string list -> unit -> Command_result.t
end