-
vfork()
is an obsolete optimization. Before good memory management,fork()
made a full copy of the parent’s memory, so it was pretty expensive. since in many cases afork()
was followed byexec()
, which discards the current memory map and creates a new one, it was a needless expense. Nowadays,fork()
doesn’t copy the memory; it’s simply set as “copy on write”, sofork()
+exec()
is just as efficient asvfork()
+exec()
. -
clone()
is the syscall used byfork()
. with some parameters, it creates a new process, with others, it creates a thread. the difference between them is just which data structures (memory space, processor state, stack, PID, open files, etc) are shared or not.