I wonder are there any other ways to create a new process in C.
I know about fork
which creates a child process.
Also, with exec
I can replace the current executing program, but yet it does not create a new process.
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.
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.