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 109 19:01 anaconda-ks.cfg

-rw-r--r-- 1 root root 540M 1020 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组合键

中断正在执行的命令

killkillall命令

⚫ 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

 

终止进程