Module Low_level_process

Low-level process handling

This is low-level enough that you should probably be using Shell instead to dispatch processes.

module Status : sig ... end
module Command_result : sig ... end
val kill : ?⁠is_child:bool -> ?⁠wait_for:Core.Time.Span.t -> ?⁠signal:Core.Signal.t -> Core.Pid.t -> unit

kills a process by sending signal; waiting for wait_for and then sending a sigkill. You need to set is_child to true when killing child processes or run waitpid on them in another. @raises Failure if the target program hangs for more that wait_for after receiving the sigkill.

caveat: is_child:false (the default) is racy: it can both send signals to wrong processes and it can also fail to notice that the target died.

val run : ?⁠timeout:Core.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:(Core.Bytes.t -> int -> unit) -> ?⁠stderrf:(Core.Bytes.t -> int -> unit) -> ?⁠tail_len:int -> prog:string -> args:string list -> unit -> Command_result.t

Runs the process.

stdoutf s len and stderrf s len should only inspect the String.subo s ~len component of s.