OS X is a lot of Unix. New processes are created using the fork () system call . This creates an almost identical copy of the process that makes the call (the difference is that fork returns 0 in the child and pid of the child in the parent). Then it’s ok to use one of the exec () syscalls in the child to convert the child into a process executing another executable.
Edit
[ Cocoa], , Cocoa, NSTask, .