3 let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in
6 Scanf.sscanf s " VmHWM: %i kB" (fun i -> Some i)
11 match matchline (input_line cin) with
15 let s = try loop() with _ -> -1 in
20 let rec monitor pid timeout mem =
21 let p, s = Unix.waitpid [ Unix.WNOHANG ] pid in
23 if (Unix.gettimeofday() > timeout || (read_procmem pid) >= mem)
24 then Unix.kill pid Sys.sigkill
26 let () = Unix.sleep 1 in
27 monitor pid timeout mem
31 let run args timeout mem =
32 let pid = Unix.fork () in
34 Unix.execvp args.(0) args
35 else monitor pid timeout mem
39 if Array.length Sys.argv < 4 then exit 1
42 let timeout = Unix.gettimeofday () +. float_of_string Sys.argv.(1) in
43 let mem = int_of_string Sys.argv.(2) in
44 let command = Array.sub Sys.argv 3 ((Array.length Sys.argv) - 3) in
45 run command timeout mem;