On the other hand, forking all threads is also a problem, since fork() in UNIX is mostly used to start a new process, that is, fork(); do_some_setup(); exec();, if you then have more than one thread running, things you Dont Expect(tm) can happen between those fork() and exec() calls.