Skip to main content

了解Linux Command Init

Linux系统启动详解 [LinuxCast视频教程] (六月 2026)

Linux系统启动详解 [LinuxCast视频教程] (六月 2026)
Anonim

在里面 是所有Linux进程的父级。这是计算机启动时启动的第一个进程,它一直运行直到系统关闭。它是所有其他进程的祖先。

它的主要作用是从存储在文件/ etc / inittab中的脚本创建进程。此文件通常存储导致Init在用户可以登录的每一行上生成gettys的条目。它还控制任何特定系统所需的自治进程。

运行级别

一个 运行级别 是系统的软件配置,只允许执行选定的一组进程。 Init为每个运行级别生成的进程在/ etc / inittab文件中定义。 Init可以是八个运行级别之一:0到6和S或s。通过让特权用户运行Telinit来更改运行级别,Telinit向Init发送适当的信号,告诉它要更改为哪个运行级别。

运行级别0,1和6保留。运行级别0用于暂停系统,运行级别6用于重启系统,运行级别1用于使系统进入单用户模式。运行级别S不是直接使用,而是由进入运行级别1时执行的脚本使用。

运行级别7到9也是有效的,但没有很好地记录,因为“传统的”Unix变体不使用它们。运行级别S和s是相同的。在内部,它们是同一运行级别的别名。

引导

在调用Init作为内核引导序列的最后一步之后,它会查找文件/ etc / inittab以查看是否存在该类型的条目 默认运行级别 。 initdefault条目确定系统的初始运行级别。如果没有此类条目(或根本没有/ etc / inittab),则必须在系统控制台中输入运行级别。

运行级别S或s将系统带入单用户模式,不需要/ etc / inittab文件。在单用户模式下,在/ dev / console上打开根shell。

进入单用户模式时,init从/etc/ioctl.save读取控制台的ioctl状态。如果此文件不存在,init将以9600波特和CLOCAL设置初始化该行。当init离开单用户模式时,它会将控制台的ioctl设置存储在此文件中,以便它可以将它们重用于下一个单用户会话。

当第一次进入多用户模式时,Init会执行boot和bootwait条目以允许在用户登录之前装入文件系统。然后,处理与运行级别匹配的所有条目。

启动新进程时,Init首先检查文件/ etc / initscript是否存在。如果是,则使用此脚本启动该过程。

每次子进程终止时,如果存在这些文件,Init会在/ var / run / utmp和/ var / log / wtmp中记录事实及其死亡原因。

改变运行级别

在它产生指定的所有进程之后,Init等待其后代进程之一死机,一个powerfail信号,或直到Telinit发出信号以更改系统的运行级别。当出现这三个条件之一时,它会重新检查/ etc / inittab文件。可以随时将新条目添加到此文件中。但是,init仍然等待上述三个条件之一发生。为了提供即时响应,Telinit Q或q命令可以唤醒Init以重新检查/ etc / inittab文件。

如果Init不是单用户模式并且收到powerfail信号(SIGPWR),它将读取文件/ etc / powerstatus。然后它根据此文件的内容启动命令:

  • 失败):电源出现故障,UPS正在提供电源。执行powerwait和powerfail条目。
  • 好):电源已恢复,执行powerokwait条目。
  • 低):电源出现故障,UPS电池电量不足。执行powerfailnow条目。

如果/ etc / powerstatus不存在或包含除字母F,O或L之外的任何内容,则Init的行为就像它读取字母F.

不鼓励使用SIGPWR和/ etc / powerstatus。任何想要与Init交互的人都应该使用/ dev / initctl控制通道。

当请求Init更改运行级别时,它会将警告信号SIGTERM发送到新运行级别中未定义的所有进程。然后等待五秒钟,然后使用SIGKILL信号强制终止这些进程。请注意,Init假定所有这些进程及其后代都保留在Init最初为它们创建的进程组中。如果任何进程更改其进程组从属关系,则它不会收到这些信号。这些过程需要单独终止。

使用telinit

Telinit链接到/ sbin / init。它采用一个字符的参数,并通知Init执行适当的操作。以下参数作为Telinit的指令:

  • 0,1,2,3,4,5或6:告诉Init切换到指定的运行级别。
  • a,b,c:告诉Init仅处理具有运行级别a,b或c的/ etc / inittab文件条目。
  • Q或q:告诉Init重新检查/ etc / inittab文件。
  • S或s:告诉Init切换到单用户模式。
  • 你或你:告诉init重新执行自己(保留状态)。不会重新检查/ etc / inittab文件。运行级别应为S,s,1,2,3,4或5;否则,请求会被默默忽略。

Telinit还可以告诉Init在发送进程SIGTERM和SIGKILL信号之间应该等待多长时间。默认值为五秒,但可以使用此更改此值 -t秒 选项。

Telinit只能由具有适当权限的用户调用。

Init二进制文件通过查看其进程ID来检查它是Init还是Telinit。真正的Init的进程ID始终为1.由此可见,不是调用Telinit,而是可以使用Init作为快捷方式。