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 forwait_for
and then sending asigkill
. 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 thatwait_for
after receiving thesigkill
.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
andstderrf s len
should only inspect theString.subo s ~len
component ofs
.