-
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.