1进程管理与监控
1.1Linux系统启动过程
Linux操作系统在开机后要经历一下步骤才能完成整个启动流程:BIOS自检、系统引导、内核引导和启动、init系统初始化
1.1.1 BISO自检
BIOS( Basic Input/ Output System),基本输入输出系统,可以看作是一个永久保存在ROM中的一个软件,早期的BIOS一旦写入ROM就不可修改,现在则可以使用专用擦写程序擦除后重新写入。
BIOS有两部分功能:POST和 Runtime服务。
POST(Power-on self test)
即我们通常所说的自检,主要负责检测外围关键设备(CPU、内存、显卡、键盘、鼠标等)是否正常。
Runtime
主要根据设备列表按照BIOS启动顺序来启动系统,如硬盘启动时会去读取并执行硬盘第一个扇区的代码。
1.1.2 系统引导
系统引导指的是将操作系统内核装入内存并启动系统的过程,这需要引导程序(如 GNU GRUB、LILO,这里主要讲解GRUB引导程序)来完成,GRUB包含两段主引导程序,其实BIOS会先引导第一段主程序,这部分程序保存在MBR中,执行第一段主引导程序时会查找并执行第二段主引导程序,这部分程序一般位于/boot/grub。
MBR( Master Boot Record,主引导记录)
位于磁盘的头部(第一个扇区),大小为512B,包含三部分:主引导程序(446B)、硬盘分区表(64B,DPT,Disk Partition Table)、硬盘有效标志(2B,一般为55 AA).
MBR被BIOS读取执行后会识别文件系统并査找和加载第二段主引导程序。
GRUB( Grand Unified Bootloader,多系统启动程序)
MBR引导程序会执行査找到的第二段主引导程序,即GRUB程序,位于/んoot/grub中,然后GRUB根据/boot/grub/grub.conf文件查找 Kernel信息,然后开始加载Kernel程序,当 Kernell程序被检测并加载到内存中后,GRUB会将控制权交给 Kernel程序
1.1.3 内核引导和启动
内核( Kernel)是 Linux系统最主要的程序。内核程序是以压缩格式存储在硬盘中,内核程序拿到控制权后,开始在内存中解压缩内核文件,然后挂载根文件系统,再装在第一个进程,执行/sbin/init,之后将控制权移交给init程序
1.1.4 int系统初始化
1.1.4.1 读取/etc/ inittab文件
主要用于 Linux操作系统初始化操作,根据 inittab文件设置的动作(定义了系统的默认运行级别)进行脚本的执行,第一个被执行的脚本为/etc/frc.d/rc. sysinit,这个文件是真正的 Linux操作系统初始化脚本。
rc. sysinit脚本任务主要包括:激活udev和 Selinux、根据/etc/ sysctl.conf文件来设定内核参数、设定系统时钟、装载硬盘映射、启用交换分区、设置主机名、根文件系统检测并以读/写方式重新挂载根文件系统、激活RAID和LVM设备、启用磁盘配额、根据 fstab检査并挂载其他文件系统、清理过期的锁和PID文件
1.1.4.2 执行/etc/rc.d/rc脚本
该文件定义了服务的启动顺序是先K(Kill)后S(Start),S表示的是启动时需要开启的服务内容,K表示关机时需要关闭的服务内容。具体的每个运行级别的服务状态放在etc/ rc.d/ rc *,d
( *= 0~6,代表7个运行级别)目录下,所有文件均指向/etc/init.d下相应的文件符号链接。
rc. sysinit通过分析/ etc/ inittab文件来确定系统的启动级別别,然后才执行/ etc/ rc.d/ rc*.d下的文件。
注意:真正的启动相关目录和脚本均在/etc/rc.d目录下etc相应目录权限都是指向此目录的链接。
1.2系统运行级别
不同的系统运行级别所启动的服务不同,这些级别定义在/etc/ /inittab中,init会根据定义的级别去执行相应目录下的脚本
注意:标准的运行级别是3(多用户即字符界面)或5(桌面即图形界面),千万不能设置运行级别为0和6,否则系统无法正常启动
在rhel8版本中, inittab文件被废弃了,使用 systemctl来管理运行级别
1.3进程和作业
1.3.1 相关概念
1.3.1.1 进程
进程是操作系统中一种较为抽象的概念,用来表示正在运行的程序,所以,进程不是程序,而是由程序产生的用来描述程序动态执行的过程。一个程序对应多个进程,一个进程也可以调用多个程序。
Linux系统中,由内核来完成对所有进程的控制与调度,内核中存储的进程的重要信息如下
1.3.1.2 作业
Linux统中正在执行的一个或多个相关的进程可以组成一个作业,一个作业可以启动多个进程,作业按照工作方式不同,可分为两类
前台作业:
运行于前台,用户可与进程交互
后台作业:
运行于后台,向终端输出结果,不能交互
1.3.2 进程的状态
进程有七种状态:就绪、运行、等待、挂起、终止、僵死、休眠
1.3.3 进程的分类
进程可分为两类:实时进程和非实时进程
1.3.3.1 实时进程
指响应时间尽可能短且不会被优先级进程阻塞的进程,如视频、音频以及机器人控制进程等。
1.3.3.2 非实时进程
1.3.3.2.1 交互式进程
需要与用户进行交互,花费较多时间来等待用户键盘和鼠标操作,但在接受了输入后,就要必须很快被唤醒,否则用户会感觉系统反应迟钝,如文本编辑器和图形图形应用程序等。
1.3.3.2.2 批处理进程
不需要与用户进行交互,常在后台运行,由于批处理进程不必很快响应,因此常受到调度程序的怠慢,如数据库搜索引擎等。
1.3.4 进程的优先级
进程优先级指在 Linux中,按照CPU资源分配的先后顺序形成的不同进程的队列,一般而言,优先级高的进程有优先执行的权利。进程的优先级是可以改变的。
启动进程的用户或管理员用户可以修改进程的优先级,而普通用户只能调低优先级,超级用户可调高/调低优先级
Linux中的优先级用英文字母nice表示,取值为-20-19取值越低,优先级越高,默认为0
1.3.5 进程的属性
一个进程包含多个属性参数,这些参数决定进程的编号、被执行的先后顺序及访问资源的多少,其中包括:
进程标识(PID)
Linux进程为每个进程分配了一个标识其身份的ID,称为PID。每一个PID有不同权限,系统通过此D来判断该进程的工作执行方式。
父进程标识(PID)
Linux系统中,进程间是有相关性的。用户登录 Linux后,内核会首先自主的创建几个进程,再由这些进程提供的接口去创建新的进程。创建其他进程的进程叫父进程,用标识PID标识,被创建的进程叫子进程。进程是由父进程通过通过“复制”的方式得来的。
1.4进程管理命令
1.4.1 进程与作业命令
1.4.1.1 jobs命令
功能:用于显示当前所有的作业
语法:jobs[参数]
参数:-pl
-p:
仅显示进程号
-l:
同时显示进程号、作业号、作业状态等。
切换作业使用以下命令:
fg命令:
fg [作业编号]/将作业切换到前台运行
bg命令:
bg [作业编号]/将作业切换到后台运行
【注意】可以使用ctrl+z组合键将前台程序转入后台停止运行,也可以使用ctr+C终止前台程序的运行。
1.4.1.2 ps命令
功能:用于显示进程的状态(过去时间的一次性快照)
语法:ps[参数]
参数:-ael
-a:
显示当前终端所有进程
-e:
无状态显示所有进程
-l:
显示进程详细
-x:
显示非控制终端的进程
参数:-w | r | -t 终端名 | -u[用户名]
-w:
显示完整信息,防止被截断
-r:
显示运行中的进程
-t 终端名:
显示对应终端的进程
-u [用户名]:
显示对应用户的进程
常用参数组合:
ps-w //加宽显示进程信息(不会被截断)
ps-au//显示较详细的进程信息
ps-auw //显示所有包含其他使用者的进程
1.4.1.3 kiIl命令
功能:用于终止正在运行的进程或作业
语法:ki[选项J[进程信号]进程号
选项:-l
-l:
显示系统定义的进程信号
kilI -9 $ (ps- ef grep hnlinux //杀死 linux用户的进程
kil -9 程序名 //一次性杀死所有指定程序名的进程
1.4.1.4 nice命令
功能:用于设置将要启动的进程的优先级(-20-19)
语法:nice -n [优先级值] 命令
选项:-n
-n[优先级值]:
设置进程优先级
nice -n 19 vI 。。。 //创建vi进程,其运行级别为19
1.4.1.5 renice命令
功能:用于设置正在运行中的进程的优先级(-20~+19)和指定用户(组)的优先级
语法: renice [优先级值] [选项]
选项:-p<进程号> | u<用户名> | g < GID >
-n<进程号>:
设置进程优先级
-u<用户名>:
设置指定用户的进程的优先级
-g < GID >:
设置指定用户组的进程的优先级
renice +12 -p 3302 //设置3302号进程的优先级为12
1.4.2 系统监控命令
1.4.2.1 who命令
功能:用于查看当前己登录的所有用户
语法:who [选项]
选项:-mH
-m:
显示用户名、终端及时间信息
-H:
显示标题
1.4.2.2 top命令
功能:用于查看进程状态
语法:top [选项]
选项:-b
-b:
--batch -mode,批处理模式,指分批输出信息,一般与参数n搭配使用。
选项:i -d < delay> | -n < number> | -p < pid >
i:
不显示闲置(idle)或无用( zombie)的进程
d< delay>:
设置信息更新的间隔时间(单位为秒)
-n< number>:
设置信息的更新次数,显示完后退出
1.4.2.3 free命令
功能:用于査看内存与交换分区信息
语法:free [选项]
选项:-mts
-m:
单位为MB
-t:
动态显示刷新的频率,单位 秒
-s:
增加显示内存与交换分区的总和信息