几乎所有的 linux 课程都说,在给定运行级别的情况下,init 进程将执行适当的 shell 脚本来初始化环境。但是没有一门课程详细描述了init进程是如何做到的。
据我了解,init 进程基本上是一个 C 程序,就像任何 Hello World C 代码一样。只有更复杂。有谁知道这个 C 程序实际上是如何运行所有脚本并调用它们的?
我真的很感激任何答案,尤其是如果您有指向示例源代码的链接。
您可以在不同的文档中找到它的作用的解释:
你可以在那里找到它的源代码:
基本上,init
作为进程 1,对fork()
系统上的每个应用程序都有作用。如果init=/bin/sh
在启动时使用命令行启动 linux,内核分叉的进程1
将是一个 shell。sysvinit 程序使处理复杂的引导变得更加容易。它添加了运行级别的概念,定义基本环境等。这样就可以轻松启动系统并拥有许多服务,而不仅仅是一个 shell。所有这部分在我给你的文档中都有很好的解释。
有谁知道这个 C 程序实际上是如何运行所有脚本并调用它们的?
好吧,就像你的问题一样简单。当您启动系统时,init 会读取inittab
文件,确定您的偏好(默认运行级别是什么?要生成什么程序?有多少控制台?..),并且对于所选的运行级别,将派生一个 shell,该 shell 将执行启动脚本。然后,该 shell 脚本将进入您从中激活的 shell 脚本/etc/init.d
。通常 shell 脚本部分是非常特定于发行版的,这就是为什么我给你两个链接,你可能会发现它在 ubuntu 和 debian 上有所不同......
有关源代码的更多详细信息,您可能希望从init.c
包含 init 的 mainloop 的底部开始。
并为您的好奇心+1!