What are the ways to create a new process in C?
As far as I'm aware only fork
, vfork
and clone
are used to create new processes in linux
. (posix_spawn
is not a syscall, but rather a library function which uses one of the syscalls above to create the process).
exec
(and its sibling functions) is used to "mutate" a process, changing its memory layout according to the given ELF file.
(the example below is a very simplified version of the process, that leaves a lot of things out)
For example, when you run a command from your bash
terminal, it uses fork
(or clone). After the fork
syscall, a new process is created and its memory layout is exactly the same as your bash
terminal (To understand it better, read about Virtualization
& COW, Copy-On-Write
). Afterwards, the new process calls execv
(or a similar function) to execute the ELF given to it by the command.