我的理解是,这fork
是通过克隆父进程来创建新进程的系统调用。通过什么创建父进程?如果使用 C 库创建多个进程,创建第一个进程的系统调用是什么?例如运行时./main.o
答案1
内核本身包含一个execve()
创建进程 1 (init) 的内部调用,该进程永远不会退出。
Init()是整个进程树的根。它首先为所有已知服务和其他配置的任务以及所有登录设备分叉进程。
答案2
当您从 shell 运行程序时,shell 就是其父进程。
shell 调用fork()
创建一个新的子进程,然后在该新进程中调用该族之一exec()
来开始运行您的程序。
如果您的程序由其他(非 shell)进程启动,则顺序是相同的。
显然,这必须从某个地方开始:所有进程的最终祖先是进程init
(PID 0),它由内核神奇地启动以启动用户空间。