C中创建新进程的方式有哪些?

What are the ways to create a new process in C?

我想知道有没有其他方法可以在 C 中创建一个新进程。 我知道 fork 会创建一个子进程。 此外,使用 exec 我可以替换当前正在执行的程序,但它不会创建新进程。

据我所知,只有 forkvforkclone 用于在 linux 中创建新进程。 (posix_spawn 不是系统调用,而是使用上述系统调用之一创建进程的库函数)。

exec(及其兄弟函数)用于“改变”进程,根据给定的 ELF 文件更改其内存布局。

(下面的例子是这个过程的一个非常简化的版本,省去了很多东西)

例如,当您从 bash 终端 运行 命令时,它使用 fork(或克隆)。在 fork 系统调用之后,创建了一个新进程,其内存布局与您的 bash 终端完全相同(要更好地理解它,请阅读 VirtualizationCOW, Copy-On-Write) .之后,新进程调用execv(或类似的函数)来执行命令给它的ELF。