初始化与shell cripts的进程交互

几乎所有的linux课程都会说init进程在给定运行级别的情况下会执行适当的shell脚本来初始化环境。 但是非课程详细描述了init过程是如何实现的。

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

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

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

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

  • init.h里
  • INIT.C

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

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

那么,就像你的问题一样简单。 当你启动你的系统时,init读取inittab文件,找出你的首选项(默认的运行级别是什么?产生什么程序?有多少个控制台?),并且对于选定的运行级别将分派一个shell来执行启动脚本。 那么这个shell脚本将会从你从/etc/init.d激活的shell脚本。 通常shell脚本部分是非常分布特定的,这就是为什么我给了你两个链接,你可能会发现它是不同的Ubuntu和Debian的…

有关源代码的更多细节,您可能需要从包含init主循环的init.c的底部开始。

和你的问题+1你的好奇心!