occasional epipe exits from port_command
Ken Ellis
kaellis@REDACTED
Thu Feb 17 23:10:21 CET 2011
Hi all,
I get some occasional exits when working with open_port and
port_command. Reproducing with a simple case below. Apologies, new
to using these. This code will occasionally exit with an epipe (try
running repeatedly if you have trouble reproducing):
do_work() ->
Port = erlang:open_port({spawn,"echo i run quickly"},[exit_status,
stream, use_stdio, stderr_to_stdout]),
port_command(Port,"dummy data"),
port_close(Port).
=ERROR REPORT==== 17-Feb-2011::16:55:30 ===
Error in process <0.33.0> with exit value:
{epipe,[{erlang,port_command,[#Port<0.722>,"dummy
data"]},{port_test,do_work,0},{erl_eval,do_apply,5},{erl_eval,eval_lc1,6},{erl_eval,eval_generate,7},{erl_eval,eval_lc,6},{shell,exprs,7},{shell,eval_exprs,7}]}
Whereas this code, which waits for the shell command to exit by
sleeping briefly, will always throw a bad argument exception:
do_work() ->
Port = erlang:open_port({spawn,"/bin/fjaldkg"},[exit_status,
stream, use_stdio, stderr_to_stdout]),
timer:sleep(500),
port_command(Port,"dummy data"),
port_close(Port).
** exception error: bad argument
in function port_command/2
called as port_command(#Port<0.585>,"dummy data")
in call from port_test:do_work/0
And this one will always work fine, writes to the port while it is still open:
do_work() ->
Port = erlang:open_port({spawn,"sleep 1"},[exit_status, stream,
use_stdio, stderr_to_stdout]),
port_command(Port,"dummy data"),
port_close(Port).
I would think that the port_command would either work, or throw the
bad argument exception. The relatively rare epipe I don't know how to
handle. Is it intended behavior? Or to I have to plan on any
port_command potentially exiting with an epipe?
Thanks,
Ken
More information about the erlang-questions
mailing list