let run closer command = let (from_command,to_command) = Unix.open_process command in closer to_command ; try while true do print_endline (input_line from_command) ; done with End_of_file -> () ; ignore (Unix.close_process (from_command,to_command)) ;; let _ = String.create (Sys.max_string_length) in run (fun to_command -> Unix.close (Unix.descr_of_out_channel to_command)) "echo 1" ; run (fun to_command -> Unix.close (Unix.descr_of_out_channel to_command)) "echo 2" ; run (fun to_command -> close_out to_command) "echo 3" ; run (fun to_command -> close_out to_command) "echo 4" ;