<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
> >I understand - I was pointing more to the idea than the implementation. I<br>
> >think Erlang/OTP should perhaps provide a standard wrapper C program that<br>
> >will run any program as a child, and has a back-channel that allows you to<br>
> >kill it (and its child) if the child becomes non-responsive.<br>
><br>
> Perhaps, but they can't do everything for you - it's a trivial program<br>
> to write, except that there's a lot of little things that it should do<br>
> in different ways depending on your needs, which means that it will<br>
> become quite complex to use if it should cover everyone's needs.<br>
> E.g. does it need to "proxy" input and/or output for the child program?<br>
> Should it grab its stdio for this or use some other file descriptors?<br>
> What "protocol" should it talk on the port pipes back to Erlang? Etc.<br>
><br>
> --Per<br>
_______________________________________________<br>
<br>
<br>
 Though not addressing all the questions above, here's an old<br>
 post from me regarding how I'm using open_port and killing the<br>
 spawned process ...<br>
<br>
<br>
 <a href="http://www.trapexit.org/forum/viewtopic.php?p=30762&highlight=&sid=0cce5d6ad7c14306754ec99249fe912f" target="_blank">http://www.trapexit.org/forum/viewtopic.php?p=30762&highlight=&sid=0cce5d6ad7c14306754ec99249fe912f</a><br>

<br>
<br>
 I use the technique to monitor a USB port.<br>
<br>
<br>
 In the original post I forgot to include the command I use to echo back<br>
 the PID;<br>
<br>
 I get the PID using my port/0 command ...<br>
<br>
-define(IF, "/dev/ttyUSB0").<br>
-define(DD, "/bin/dd if=" ++ ?IF ++ " bs=1 oflag=dsync& pid=$!; echo $pid").<br>
<br>
port() -><br>
   Port = open_port({spawn, ?DD },<br>
                    [eof, exit_status, use_stdio, binary]) ,<br>
<br>
   receive<br>
     {Portb, {data, Pid_with_lf}} -><br>
     {ok, Pid_of_dd, 1} = regexp:gsub(binary_to_list(Pid_with_lf), "\n", "")<br>
   end ,<br>
<br>
   io:fwrite('~p~n', [{Portb, {data, Pid_with_lf}}]) ,<br>
<br>
   {Port, Pid_of_dd}<br>
.<br>
</blockquote><div><br>Thanks - I read the trapexit post, too, and that's very interesting!! The things you can do with dd! The mind boggles.<br>Edwin<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
~Michael<br>
<font color="#888888"><br>
<br>
--<br>
Michael McDaniel<br>
Portland, Oregon, USA<br>
<a href="http://autosys.us" target="_blank">http://autosys.us</a><br>
<br>
<br>
</font></blockquote></div><br>