Under Unix-y systems (by unix-y I mean those that implement POSIX fork & exec, but no other process creation mechanism), processes are created by forking and exec-ing the target executable. However, it is well-known that forking threaded applications is a bad idea. Since all Mono applications are multithreaded by the virtue of the GC running in its own thread(s), how does Mono handle Process.Start()?
I've dug a bit in the codebase, but all I could find is a regular fork & exec. What's happening to the locks? Does the runtime do some thread magic?