Obviously, if you're porting existing code, you'll want to use whatever the existing
code uses.
For new code, you should avoid fork() if at all possible.
Here's why:
- Although fork() works with multiple threads, you need to
register a pthread_atfork() handler and lock every single
mutex before you fork, complicating the design.
- The child of fork() duplicates all open file descriptors.
As we'll see in the Resource Manager
chapter later,
this causes a lot of work—most of which
will be unnecessary if the child then immediately does an exec()
and closes all the file descriptors anyway.
Your best choice for portability is
posix_spawn().