第9章Linux下的进程管理和服务优化
Linux下的进程管理和服务优化
Linux的引导流程
Linux的运行级别
管理进程和服务
Linux引导流程总览(CentOS 5 )
CentOS 5 的其他系统初始化文件
/etc/rc.d/rc.sysinit
⚫ 由init进程调用执行
⚫ 完成设置网络、主机名、加载文件系统等初始化工作
/etc/rc.d/rc脚本文件
⚫ 由init进程调用执行
⚫ 根据指定的运行级别, 加载或终止相应的系统服务
/etc/rc.local脚本文件
⚫ 由rc脚本调用执行
⚫ 保存用户定义的需开机后自动执行的命令
CentOS 6 的Upstart启动方式
Upstart启动方式
⚫ 在RHEL 6.x系统中,采用了全新的Upstart启动方式,大大提高了开机效率。实际上, /sbin/init程序已经改由upstart软件包提供,而不再是SysVinit软件包。
⚫ Upstart使用了基于事件(状态变化)的模型,更加符合一个快速、有效的init系统标准:尽 可能启用更少进程、尽可能将更多进程并行启动。而传统的System V初始化采用串行启动, 依次加载各种服务,不仅消耗了许多等待的时间,也难以适应系统状态的改变,比如U盘的 热插拔、文件系统的挂载、蓝牙设备的连接等。
⚫ 当然,Upstart仍然保持着对System V模式的向下兼容,因此依旧能够通过运行级别来管理 各种服务,比如使用/etc/rc.d/目录、chkconfig工具等等。Upstart不再使用单一的 /etc/inittab配置文件,而是将各种初始化配置分散存放,并各自响应相关的启动事件。init 程序的配置目录位于/etc/init/,原有的/etc/inittab文件中仅保留默认运行级别的配置。
CentOS 6 的Upstart启动方式
相关的配置文件
⚫ 将各种初始化配置分散存放
⚫ 相应相关的启动事件
init进程(CentOS 5、6)
init 进程
⚫ 由 Linux 内核加载运行 /sbin/init 程序
⚫ 是系统中第一个进程
⚫ PID(进程标记)号永远为1
Linux系统的运行级别(CentOS 5、6)
运行级别
⚫ 指运行Linux系统的不同模式
⚫ 每种模式对应不同的服务程序组合
默认的7种运行级别
⚫ 0:关机状态
⚫ 1:单用户模式
⚫ 2:字符界面的多用户模式(不支持网络)
⚫ 3:字符界面的完整多用户模式
⚫ 4:未分配使用
⚫ 5:图形界面的多用户模式
⚫ 6:重新启动
Linux系统的运行级别(CentOS 5、6)
查看运行级别
⚫ 使用runlevel命令,分别显示:
◆ 切换前的运行级别、当前运行级别
临时切换运行级别
⚫ 使用init命令结合 0-6 的运行级别参数
inittab文件的结构(CentOS 5、6)
/etc/inittab配置文件
id : runlevels : action : process
inittab文件的结构(CentOS 5、6)
runlevels——运行级别
inittab文件的结构(CentOS 5、6)
CentOS 6 的/etc/inittab文件中仅保留默认运行级别的配置
id : 5 : initdefault :
Centos7的启动
第一阶段:硬件启动
第二阶段:GRUB2启动引导阶段
⚫ boot.img
⚫ core.img
⚫ *.mod
⚫ grub.cfg
第三阶段:内核引导阶段
⚫ /boot/vmlinuz
⚫ /boot/initramfs
⚫ 内核初始化
第四阶段:systemd初始化阶段
⚫ /usr/lib/systemd/systemd
系统服务控制
⚫ 常用方式
◆ service 服务名称 控制类型
◆ /etc/rc.d/init.d 服务名称 控制类型
◆ systemctl 控制类型 服务名称
⚫ 控制类型
◆ start:启动
◆ stop:停止
◆ restart:重新启动
◆ reload:重新加载
◆ status:查看服务状态
◆ ……
Linux系统的运行级别
优化启动过程
系统服务管理工具
⚫ ntsysv工具
◆ 提供一个交互式、可视化窗口
◆ 可以在字符终端运行
◆ 便于集中管理多个服务
⚫ chkconfig工具
◆ 不提供交互式、可视化窗口
◆ 管理单个服务效率更高
⚫ systemctl工具
◆ Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。
◆ Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配 置类UNIX系统。
控制运行级别
默认运行级别
设置运行级别
系统服务的启动和控制
ntsysv系统服务管理工具
⚫ ntsysv
⚫ ntsysv --level 级别列表
例如:
系统服务的启动和控制
查看系统服务的启动状态
⚫ chkconfig --list
⚫ chkconfig --list 服务名称
⚫ 服务脚本位置:/etc/init.d → /etc/rc.d/init.d
[root@centos7 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
systemctl list-dependencies [target]。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
例如:
查看当前服务
系统服务启动和控制
设置系统服务的启动状态
⚫ chkconfig --level 级别列表 服务名 on|off
[root@localhost ~]# chkconfig --level 2345 network on
[root@localhost ~]# chkconfig --list network
network 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
系统服务的启动和控制
systemctl管理服务
⚫ 查看所有已激活的服务
[root@centos7 ~]# systemctl list-units -t service
⚫ 查看所有服务
[root@centos7 ~]# systemctl list-units -t service –a
⚫ 查看所有服务的开机自启状态
[root@centos7 ~]# systemctl list-unit-files -t service
系统服务的启动和控制
systemctl管理服务
⚫ 设定某服务开机启动
[root@centos7 ~]# systemctl enable name.service
⚫ 设定某服务开机禁止启动
[root@centos7 ~]# systemctl disable name.service
⚫ 用来列出该服务在那些运行级别下启用或禁用
[root@centos7 ~]# ls /etc/systemd/system/*.wants/sshd.service
⚫ 查看服务是否开机自启
[root@centos7 ~]# systemctl is-enabled name.service
⚫ 查看服务的依赖关系
[root@centos7 ~]# systemctl list-dependencies
程序与进程的关系
程序
⚫ 保存在硬盘、光盘等介质中的可执行代码和数据
⚫ 是静态保存的代码
进程
⚫ 在CPU及内存中运行的程序代码
⚫ 是动态执行的代码
⚫ 父、子进程:每个进程可以创建一个或多个进程
查看进程信息
ps命令
查看进程信息
top命令
⚫ 用途:查看动态的进程排名信息
[root@centos7 ~]# top
查看进程信息
pgrep命令
⚫ 用途:根据特定条件查询进程 PID 信息
[root@centos7 ~]# pgrep -l log
420 xfs-log/dm-0
610 xfs-log/sda1
683 systemd-logind
691 login
1063 rsyslogd
[root@centos7 ~]# pgrep -l -U root -t tty1
1457 bash
1797 top
查看进程信息
pstree命令
⚫ 用途:以树形结构列出进程信息
⚫ pstree属于包psmisc
例如:
进程的启动方式
手工启动
⚫ 前台启动:用户输入命令,直接执行程序
⚫ 后台启动:在命令行尾加入“&”符号
[root@centos7 ~]# dd if=/dev/cdrom of=/root/centos7.iso &
[1] 11856 [root@centos7 ~]# ll -h
总用量 1.0G
-rw-------. 1 root root 1.2K 10月 9 19:01 anaconda-ks.cfg
-rw-r--r-- 1 root root 540M 10月 20 16:52 centos7.iso
进程的前后台调度
Ctrl+Z 组合键
⚫ 将当前进程挂起,即调入后台并停止执行
[root@centos7 ~]# dd if=/dev/cdrom of=/root/centos7.iso & [1] 11866
jobs 命令
⚫ 查看处于后台的任务列表
[root@centos7 ~]# jobs
[1]+ 运行中 dd if=/dev/cdrom of=/root/centos7.iso &
fg 命令
⚫ 将后台进程恢复到前台运行,可指定任务序号
[root@centos7 ~]# fg 1
dd if=/dev/cdrom of=/root/centos7.iso
记录了9109504+0 的读入
记录了9109504+0 的写出
4664066048字节(4.7 GB)已复制,39.4173 秒,118 MB/秒
终止进程的运行
Ctrl+C组合键
⚫ 中断正在执行的命令
kill、killall命令
⚫ kill用于终止指定PID号的进程
⚫ killall用于终止指定名称的所有进程
⚫ -9 选项用于强制终止
终止进程的运行
pkill命令
⚫ 用途:根据特定条件终止相应的进程
⚫ 常用命令选项:
◆ -U:根据进程所属的用户名终止相应进程
◆ -t:根据进程所在的终端终止相应进程
[root@centos7 ~]# pgrep -l -t tty1
1457 bash 11867 top
[root@centos7 ~]# pkill -9 -t tty1
[root@centos7 ~]# pgrep -l -t tty1 11877 agetty
终止进程