<div dir="ltr">Thank you very much Felix. really appreciate your time and effort</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 12, 2015 at 3:50 PM, Felix Gallo <span dir="ltr"><<a href="mailto:felixgallo@gmail.com" target="_blank">felixgallo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">a) spawn() never fails.  You'll get a Pid back, or the BEAM will crash in which case mere erlang programs are the least of your problems.  The Pid will then either apply M:F to A, if M:F exists and is of arity befitting A, or apply error_handler:undefined_function to [M,F,A]), which in turns prints out that message you saw unless you've redefined the error handler, which you should definitely not do.  <div><br></div><div>b) monitor() also will never fail.  If monitor() is called on a non-existent Pid, you will get a DOWN message immediately.  monitor() will still return a Ref.  (note: this applies to erlang released within the last few years; before, you would get a badarg exception).</div><div><br></div><div>os:timestamp() will also never fail.</div><div><br></div><div>In general your approach should be to assume that everything will work out fine and only program, at first, the 'happy path' for your code.  Then fix them up as you find valid inputs which cause them to crash.  </div><div><br></div><div><a href="http://erldocs.com/" target="_blank">http://erldocs.com/</a> and <a href="http://www.erlang.org/doc/" target="_blank">http://www.erlang.org/doc/</a> are really good, and can help you answer a lot of these questions; the functions you list are well documented, for example.  If you're using a Mac, I can recommend getting 'Dash' (a documentation-at-your-hotkey app with a search bar) as well.<br></div><div><br></div><div>F.</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Mon, Jan 12, 2015 at 3:14 PM, Harit Himanshu <span dir="ltr"><<a href="mailto:harit.subscriptions@gmail.com" target="_blank">harit.subscriptions@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">I need to make my own function my_spawn(M,F,A) which work similar to spawn(M,F,A) but if a spawned process dies, I need to print a message telling how long a process lived.<div><br></div><div><br></div><div>My attempt looks like  </div><div><br></div><div><div>-export([my_spawn/3]).</div><div><br></div><div>my_spawn(Mod, Func, Args) -></div><div>  Pid = spawn(Mod, Func, Args),</div><div>  Ref = monitor(process, Pid),</div><div>  Start = os:timestamp(),</div><div>  receive</div><div>    {'DOWN', Ref, process, Pid, _Why} -></div><div>      io:format("process died after ~p microseconds.~n", [timer:now_diff(os:timestamp(), Start)])</div><div>  end,</div><div>  Pid.</div></div><div><br></div><div><br></div><div>so when I run this, I see  </div><div><br></div><div><div>1> Pid = error_handling:my_spawn(area_server1, area, []).</div><div>process died after 363 microseconds.</div><div><br></div><div>=ERROR REPORT==== 12-Jan-2015::15:06:53 ===</div><div>Error in process <0.33.0> with exit value: {undef,[{area_server1,area,[],[]}]}</div><div><br></div><div><0.33.0></div><div>2> </div></div><div><br></div><div><b>Problems</b><b>?</b></div><div>- I am learning both Erlang and concurrency for the first time, so I see following potential problems with this approach</div><div><br></div><div>a.) What if spawned process failed in the first place, so I get no Pid</div><div>b.) What if command fails executing either "Ref = .." or "Start = .."?</div><div><br></div><div>In such scenarios the program will not work effectively, what are the recommended ways to solve such thing?</div><div><br></div><div>Also, do you see any potential race conditions here? I take a guess saying no because even if multiple process trying to execute the same code, they will return different Pid anyway, is that understanding correct?</div><div><br></div><div>Thanks a lot</div><span><font color="#888888"><div>+ Harit</div></font></span></div>
<br></div></div>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">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><br></div>
</blockquote></div><br></div>