Browse thread
Unix.create_process vs Unix.open_process_out
-
James Jones
- Johann Spies
- Gerd Stolpmann
- Gerd Stolpmann
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2008-04-14 (13:31) |
From: | Gerd Stolpmann <info@g...> |
Subject: | Re: [Caml-list] Unix.create_process vs Unix.open_process_out |
Am Montag, den 14.04.2008, 08:43 -0400 schrieb James Jones: > 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. Ahem, the second version doesn't. Note that there are 4 involved descriptors: r and w before forking, and r and w after forking (resp., the descriptors in the calling and in the called program). You close only one of the w's, so the pipe remains open. > 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? Yes. Gerd > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs -- ------------------------------------------------------------ Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de Phone: +49-6151-153855 Fax: +49-6151-997714 ------------------------------------------------------------