<html><head></head><body bgcolor="#FFFFFF"><div>Hello,</div><div><br></div><div>At general level this is</div><div>f(),</div><div>spawn(fun g/0),</div><div>g()<br><br>The major concern here is supervision of forked processes, forking of gen_server and making OTP compliment application. <br>
<br>Best Regards,<div>Dmitry >-|-|-*></div><div><br></div></div><div><br>On 7.9.2012, at 4.31, Xiao Jia <<a href="mailto:stfairy@gmail.com">stfairy@gmail.com</a>> wrote:<br><br></div><div></div><blockquote type="cite">
<div>Well, this approach can solve much of the problem.<br>Do you know if there's any approach which can clone the control flow as well as the states?<br><br>Of course in your example the control flow is cloned as you also <font face="courier new, monospace">loop</font> in the <font face="courier new, monospace">spawn fun</font>. <br>

But what I want is a more general case. Take the following C code as an example.<br><br><font face="courier new, monospace">f();<br>fork();<br>g();</font><br><br>Here the return value of <font face="courier new, monospace">fork()</font> is ignored, so the next steps of both the parent and the child <div>

process are the same, which is to execute <font face="courier new, monospace">g()</font>. Can I achieve this in Erlang?<br><br>2012/9/6 Bengt Kleberg <<a href="mailto:bengt.kleberg@ericsson.com">bengt.kleberg@ericsson.com</a>><br>

><br>> Greetings,<br>><br>> Suppose that you have a process running like this:<br>> loop( State ) -><br>>         receive<br>>         normal -><br>>                 New_state = new_state( State ),<br>

>                 loop( New_state )<br>>         _ -> ok<br>>         end.<br>><br>> You could add a forking like this:<br>> loop( State ) -><br>>         receive<br>>         normal -><br>

>                 loop( State )<br>>         fork -><br>>                 spawn( fun() -> loop(State) end ),<br>>                 loop( State )<br>>         _ -> ok<br>>         end.<br>><br>

><br>> bengt<br>><br>> On Thu, 2012-09-06 at 17:02 +0200, Xiao Jia wrote:<br>> > Hi,<br>> ><br>> ><br>> > How can I fork/clone a process in Erlang, just as the fork in Unix?<br>> ><br>

> ><br>> > I have searched a lot but just got nothing related to that. I suppose<br>> > the usage may look like this:<br>> ><br>> ><br>> > case fork() of<br>> >   {parent, Pid} -> in_parent_process_now();<br>

> >   {child, Pid} -> in_child_process_now();<br>> > end.<br>> ><br>> ><br>> > Any ideas?<br>> ><br>> ><br>> ><br>> ><br>> > Thanks,<br>> ><br>> ><br>

> > Xiao Jia<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">http://erlang.org/mailman/listinfo/erlang-questions</a><br>

<br></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>erlang-questions mailing list</span><br><span><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a></span><br>
<span><a href="http://erlang.org/mailman/listinfo/erlang-questions">http://erlang.org/mailman/listinfo/erlang-questions</a></span><br></div></blockquote></body></html>