运行机制

一、Linux初始化init系统

Linux操作系统的启动首先从BIOS开始,接下来Linux引导程序将内核映像加载到内存,进行内核初始化,内核初始化的最后一步就是启动PID为1的init进程。

init系统就是一个能够定义、管理和控制init进程的行为,并负责组织和运行许多独立的或相关的初始化工作,从而让系统进入一个用户设定的运行模式中的系统。

大多数Linux发行版的init系统是和System V相兼容的,因此称为sysvinit。在CentOS7.x发行版本之前的系统中都采用sysvinit。为了能更快的启动系统,开发者进行不断改进,先后出现了upstart和systemd两个主要的init系统。

二、runlevel到target的改变

sysvinit用术语“runlevel”来定义系统运行级别。在CentOS7.x版本之前的系统中,通常有7种运行级别,这些运行级别均在/etc/inittab文件中指定,sysvinit程序通过检查/etc/inittab文件中是否含有“initdefault”项来启动一个默认的运行级别。

0:表示关机模式

1:表示单用户模式,单用户模式下只有系统管理员可以登录

2:表示多用户模式,不支持文件共享

3:表示完全的多用户模式,支持NFS服务,默认登录到字符界面

4:表示基本不用的用户模式,可以实现某些特定的登录请求

5:表示完全多用户模式,默认登录到图形界面

6:表示重启模式

这些运行级别和Linux中的init程序相互对应

在CentOS7.x版本中,由于采用了systemd管理体系,因此以前运行级别的概念被新的运行目标所取代。在新的systemd管理体系里,默认的target通过软链接来实现

要查看运行级别与target的对应关系,可以通过命令查看

[root@localhost ~]# ll /lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 3月   6 04:00 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 3月   6 04:00 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 3月   6 04:00 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 3月   6 04:00 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 3月   6 04:00 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 3月   6 04:00 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 3月   6 04:00 /lib/systemd/system/runlevel6.target -> reboot.target

有5种target模式。poweroff.target对应runlevel0,表示关机模式;rescue.target对应runlevel1,表示单用户模式或救援模式;multi-user.target对应runlevel2、runlevel3、runlevel4,表示多用户模式;graphical.target对应runlevel5,表示图形界面多用户模式;reboot.target对应runlevel6,表示重启系统模式

三、系统关机过程

1、shutdown命令

shutdown命令是用shell编写的程序,必须由超级用户才能执行。shutdown命令执行后,会以广播的形式通知正在系统中工作的所有用户,系统将在指定时间内关闭。此时login指令被冻结,新的用户不能登录。当所有用户从系统中注销或者指定时间已到时,shutdown就发送信号给init程序,要求init程序改变系统运行级别。接着init程序根据shutdown指令传递的参数,相应的改变运行级别

(1)详细语法

shutdown [-fFhknrc(参数名称)] [-t 秒数] 时间 [警告信息]

各参数含义如下:

-f:重新启动时不执行fsck

-F:重新启动时执行fsck

-h:将系统关机

-n:不调用init程序关机,而是由shutdown自己进行

-r:shutdown之后重新启动系统

-c:取消前一个shutdown命令

-t<秒数>:发送警告信息和关机信号之间要延迟多少秒

[时间]:设置多久时间后执行shutdown命令。参数有hh:mm或+m两种模式。now表示立即执行

[警告信息]:要传送给所有登录用户的信息

(2)应用举例

立即关机重启

shutdown -r now
立即关机
shutdown -h now
设定5分钟后关机,同时发送警告信息给登录的用户
shutdown +5 "系统将在5分钟后关机"

2、halt命令

将终止所有应用程序,然后调用系统指令sync。sync将所有内存信息通过文件系统写入硬盘,然后停止内核

语法格式

halt [-finp]

halt指令在执行时,会首先检测系统的运行级别,如果运行级别为0或6,则立即关闭系统,否则调用shutdown来关闭系统

参数含义

[-f]:不管当前系统出于何种运行级别,都不调用shutdown而强制关机

[-i]:关机之前,关掉所有的网络接口

[-n]:halt执行时,不调用系统指令sync

[-p]:关机时调用poweroff

3、reboot命令

reboot命令的执行过程与halt基本类似,不同的是halt用于关机,而reboot用于关机后系统重启

4、init命令

init程序主要用于系统不同运行级别之间的切换,切换的工作是立即完成的


猜你喜欢

转载自blog.csdn.net/sinat_41231785/article/details/80927332