<p>It is the responsibility of the port program to shut down when stdin reaches EOF.<br>
This behaviour/expectation confused me too at some point, but it probably has its merits: not all software is designed for "let it crash", so simply killing the port program might be too crude in some circumstances.</p>

<div class="gmail_quote">Den 26/09/2012 23.55 skrev "Tim Watson" <<a href="mailto:watson.timothy@gmail.com">watson.timothy@gmail.com</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm seeing this happen, and it's most confusing. The program is not launched using nohup/setsid or anything to send it to the background. The arguments passed to open_port/2 are thus:<br>
<br>
[{args, Args}, {env, Env}, exit_status, hide, stderr_to_stdout, use_stdio, {line, 16384}]<br>
<br>
The script that is being run essentially does this:<br>
<br>
# fiddle around with some environment variables, then<br>
exec erl \<br>
    -pa ${EBIN_ROOT} \<br>
    ${START_INSTRUCTION} \<br>
    -sname ${NODENAME} \<br>
    -boot start_sasl \<br>
    ${CONFIG_ARG} \<br>
    +W w \<br>
    ${SERVER_ERL_ARGS} \<br>
    ${LISTEN_ARG} \<br>
    "$@"<br>
<br>
<br>
After some tests are run, the port is closed (using close_port). The connected process for the port is a gen_server, so it's *possible* that this exits without cleanly shutting down, but I'm under the impression (from experimentation) that if the connected process dies, the port is closed anyway. Nevertheless, I'm seeing *stuck nodes* that survive the test run and are locked up because some code on the node (which should be dead after the port goes) is stuck in an io:format/2 call which will never return because stdout is not responding - hardly surprising under the circumstances.<br>

<br>
Can someone explain to me what's going on here? Is this an issue with the exec call, and if so what is the problem with it? I've got a minimal example using exec that doesn't behave like this, so I'm a bit bemused. What's really confusing is that the process the port is used to open should presumably be closed regardless of what some sub-process is doing, and I thought that exec returned the stdout of the subprocess anyway!?<br>

<br>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div>