Consider the following two functions: let test1 () =   let w = Unix.open_process_out "cat" in   assert (Unix.close_process_out w = Unix.WEXITED 0) let test2 () =   let r,w = Unix.pipe () in   let pid = Unix.create_process "cat" [| "cat" |] r Unix.stdout Unix.stderr in   Unix.close w;   assert (snd (Unix.waitpid [] pid) = Unix.WEXITED 0) Both execute "cat" and then close its stdin immediately. This should cause cat to terminate. In test1 this works as expected but in test2, cat keeps running forever. Is this the expected behavior of Unix.create_process?