C中创建新进程的方式有哪些?
What are the ways to create a new process in C?
我想知道有没有其他方法可以在 C 中创建一个新进程。
我知道 fork
会创建一个子进程。
此外,使用 exec
我可以替换当前正在执行的程序,但它不会创建新进程。
据我所知,只有 fork
、vfork
和 clone
用于在 linux
中创建新进程。 (posix_spawn
不是系统调用,而是使用上述系统调用之一创建进程的库函数)。
exec
(及其兄弟函数)用于“改变”进程,根据给定的 ELF 文件更改其内存布局。
(下面的例子是这个过程的一个非常简化的版本,省去了很多东西)
例如,当您从 bash
终端 运行 命令时,它使用 fork
(或克隆)。在 fork
系统调用之后,创建了一个新进程,其内存布局与您的 bash
终端完全相同(要更好地理解它,请阅读 Virtualization
和 COW, Copy-On-Write
) .之后,新进程调用execv
(或类似的函数)来执行命令给它的ELF。
我想知道有没有其他方法可以在 C 中创建一个新进程。
我知道 fork
会创建一个子进程。
此外,使用 exec
我可以替换当前正在执行的程序,但它不会创建新进程。
据我所知,只有 fork
、vfork
和 clone
用于在 linux
中创建新进程。 (posix_spawn
不是系统调用,而是使用上述系统调用之一创建进程的库函数)。
exec
(及其兄弟函数)用于“改变”进程,根据给定的 ELF 文件更改其内存布局。
(下面的例子是这个过程的一个非常简化的版本,省去了很多东西)
例如,当您从 bash
终端 运行 命令时,它使用 fork
(或克隆)。在 fork
系统调用之后,创建了一个新进程,其内存布局与您的 bash
终端完全相同(要更好地理解它,请阅读 Virtualization
和 COW, Copy-On-Write
) .之后,新进程调用execv
(或类似的函数)来执行命令给它的ELF。