Init进程与shell脚本的交互

时间:2013-06-21 11:11:36

标签: linux shell init

几乎所有的Linux课程都表示,在运行级别的情况下,init进程将执行适当的shell脚本来初始化enivronment。但非课程详细描述了init过程如何做到这一点。

据我所知,init进程基本上是一个C程序,就像任何Hello World C代码一样。只有更复杂。有谁知道这个C程序如何实际运行所有脚本并调用它们?

我真的很感激任何答案,特别是如果你有一个示例源代码的链接。

1 个答案:

答案 0 :(得分:1)

您可以在不同的文档中找到它的作用的解释:

你可以在那里找到它的源代码:

基本上,init作为进程1,具有fork()系统上每个应用程序的角色。如果在引导时使用命令行init=/bin/sh启动linux,则内核分叉的进程1将是一个shell。 sysvinit程序使得处理复杂启动变得容易一些。它增加了运行级别的概念,定义了基本环境等。这样就可以轻松启动系统并拥有许多服务,而不仅仅是shell。所有这一部分都在我给你的文件中得到了很好的解释。

  

有谁知道这个C程序如何实际运行所有脚本并调用它们?

嗯,就像你的问题一样简单。当你启动你的系统时,init会读取inittab文件,找出你的偏好(默认运行级别是什么?产生什么程序?有多少个控制台?...),并且选择的运行级别将分叉将执行启动脚本的shell。然后,该shell脚本将进入您从/etc/init.d激活的shell脚本。通常shell脚本部分是非常特定于分发的,这就是为什么我给你两个关于它的链接,你可能会发现它在ubuntu和debian上有所不同......

有关源代码的更多详细信息,您可能需要从init.c的底部开始,其中包含init的mainloop。

对你的好奇心问题+1;