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
.