<div dir="ltr"><br><br><div class="gmail_quote">On Mon, Mar 19, 2012 at 11:40 AM, Nadav Har&#39;El <span dir="ltr">&lt;<a href="mailto:nyh@math.technion.ac.il">nyh@math.technion.ac.il</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

On Mon, Mar 19, 2012, Erez D wrote about &quot;what happens if&quot;:<br>
<div class="im">&gt; what happens if i am running a multithreaded app ( 3 threads ) and one<br>
&gt; thread calls fork() ?<br>
<br>
</div>On Linux, the new process will run ONLY a copy of the thread doing the<br>
fork(). The other threads are *not* copied to the child process.<br>
<br>
There is no way in Linux to ask to duplicate all of the process&#39;s<br>
threads, as in Solaris&#39;s forkall(2) system call. Even if such a<br>
system call existed, its usefulness would be dubious as explained<br>
in Posix&#39;s fork(2) manual:<br>
        <a href="http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html" target="_blank">http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html</a><br>
(look for the section starting in &quot;The addition of the forkall()<br>
function to the standard was considered and rejected.&quot;)<br>
<br>
All this makes fork() more or less useless for multithreaded<br>
applications except for one idiom: fork() followed by exec().<br></blockquote><div>my reason for fork is only for exec() - to protect the first program from the other.<br>the problem that may arise in forking a multithreaded is that one thread may lock a mutex and then another call for fork, which means that the child inherits the locked mutex.<br>

i do not know internaly what library function use this mutex, e.g. will close() need this mutex ? will dup() will ? in this case, trying to close a side of a pipe, duping it or even closing open fds (for security issues) may hang the child while the library waits for the mutex , and no other thread exists in the child to release it<br>

<br>a only way to resolve it, is to fork to another process before generating the other threads, the second process will be left  single threaded and so may fork() with no problems, but this way i can&#39;t use pipe(), and need to revert to named pipe which is ugly<br>

<br>any pther ideas ? things i missed ?<br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Nadav Har&#39;El                        |                    Monday, Mar 19 2012,<br>
<a href="mailto:nyh@math.technion.ac.il">nyh@math.technion.ac.il</a>             |-----------------------------------------<br>
Phone <a href="tel:%2B972-523-790466" value="+972523790466">+972-523-790466</a>, ICQ 13349191 |This space is for sale - inquire inside.<br>
<a href="http://nadav.harel.org.il" target="_blank">http://nadav.harel.org.il</a>           |<br>
</font></span></blockquote></div><br></div>