<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 16, 2015 at 11:30 AM, Nicolas Martyanoff <span dir="ltr"><<a href="mailto:khaelin@gmail.com" target="_blank">khaelin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div id=":1qd" class="" style="overflow:hidden">I also cannot find a way to actually stop the spawned application,<br>
port_close() does do it. The "UNIX way" is to send SIGTERM, wait for a bit,<br>
then send SIGKILL if the application did not stop. But I cannot find an erlang<br>
function to send a signal to an external process. I made a temporary fix using<br>
os:cmd("kill ..."), but it feels like a hack.</div></blockquote></div><br></div><div class="gmail_extra">Two options: misbehaving programs can be handled through Aleynikov's <a href="https://github.com/saleyn/erlexec">https://github.com/saleyn/erlexec</a> which wraps[0] them in a C++ helper process which understands how to gracefully communicate to the Erlang world.<br><br></div><div class="gmail_extra">Port programs normally communicate through a set of file descriptors, so the program you spawn should detect and terminate if there are errors when reading on the fd. I've been down this rabbit hole before, but I'm afraid I forgot, again, how it all works. Perhaps this is good to document in a "How to write behaving port programs" document and make it part of the OTP documentation.<br><br></div><div class="gmail_extra">[0] First time around I wrote "warps" here. Wrong, but strangely appropriate :)<br></div><div class="gmail_extra"><br clear="all"><br>-- <br><div class="gmail_signature">J.</div>
</div></div>