Well, they each certainly have their pros and cons.
Personally, I opt for forking unless I have something that requires a significant amount of shared interaction (either through required shared memory or producer/consumer queues). I find the extra overhead of forking to be minimal in modern day operating systems, and the gains are significant:
- fewer memory leaks
- process isolation
- fewer race conditions
- deadlocks/starvation not an issue
Look to the latest release of Google's Chrome as a perfect example. The current threaded asynchronous model of browsers isn't cutting it, so they're moving to a process-per-tab model for all of the above reasons.
Of course, this is a personal opinion and therefore flame-worthy, so take all advice with grain of salt :)