<div class="gmail_quote">2012/9/27 Jesper Louis Andersen <span dir="ltr"><<a href="mailto:jesper.louis.andersen@erlang-solutions.com" target="_blank">jesper.louis.andersen@erlang-solutions.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I remember this was something I had going. Let me dig code:<br>
<br>
----<br>
#!/bin/sh<br>
<br>
(cat && kill 0) | opentracker $*<br></blockquote><div>Nice incantation. I was just about to suggest using a wrapper program, but I probably wouldn't have thought of that variation.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

----<br>
<br>
So the trick is that the … && kill 0 part sends a kill signal to all processes in the current process group. This lets you stop another process since cat(1) understands what happens when stdin is closed and handles it accordingly.<br>

<br>
I've only used it in tests though so it may need work for real programs<br></blockquote><div>Such as replacing "&&" with ";" ? :-)<br>Just in case someone came along and killed the cat. (Can't at the moment imagine other scenarios where cat would exit with non-zero return values, but they probably exist.)<br>
<br>Also, replace $* with "$@" (including the quotes), for proper handling of parameters with spaces in them and such.<br><br>/Erik<br><br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<span class="HOEnZb"><font color="#888888"><br>
Jesper Louis Andersen<br>
  Erlang Solutions Ltd., Copenhagen<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Sep 27, 2012, at 4:20 AM, Erik Søe Sørensen <<a href="mailto:eriksoe@gmail.com">eriksoe@gmail.com</a>> wrote:<br>
<br>
> 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.<br>

><br>
> Den 26/09/2012 23.55 skrev "Tim Watson" <<a href="mailto:watson.timothy@gmail.com">watson.timothy@gmail.com</a>>:<br>
> 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>
> _______________________________________________<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>
</div></div></blockquote></div><br>