1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
open! Oxbow_core
let exec argv =
match argv with
| [||] | [| "" |] -> Error "nothing to execute"
| _ ->
let () =
match Unix.fork () with
| 0 ->
(try Unix.setsid () |> ignore with
| Unix.Unix_error _ ->
Printf.eprintf "Exec.exec: setsid failed: %S\n"
@@ String.concat " " (Array.to_list argv));
Sys.set_signal Sys.sigchld Sys.Signal_default;
Sys.set_signal Sys.sigpipe Sys.Signal_default;
(try Unix.execvp argv.(0) argv with
| _ ->
Printf.eprintf "Exec.exec: failed to execute: %S\n"
@@ String.concat " " (Array.to_list argv));
Stdlib.exit Exit.unavailable
| _ -> ()
in
Ok None
;;
let spawn cmd = exec [| "/bin/sh"; "-c"; cmd |]