Version française
Home     About     Download     Resources     Contact us    
Browse thread
Unix.create_process vs Unix.open_process_out
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
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)

P.S. You can close the "other" w by setting the close on exec flag:

let test2 () =
  let r,w = Unix.pipe() in
  Unix.set_close_on_exec w;
  let pid = Unix.create_process "cat" [| "cat" |] r Unix.stdout
Unix.stderr in
  Unix.close w;
  assert (snd (Unix.waitpid [] pid) = Unix.WEXITED 0);;

Gerd


> 
> 
> 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? 
> _______________________________________________
> 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
------------------------------------------------------------