一、基本概念认识

用户空间:用户代码在CPU上执行时的状态,我们称之为用户态,也成为用户空间
内核空间:当用户空间的应用程序需要调用硬件功能时,这个时候需要应用程序发起系统调用,因为只有内核才具有对硬件操作的直接权限,此时会把内核代码加载到CPU上执行,我们把这个状态称之为内核态,也称之为内核空间,此时由应用程序发起的系统调用,也称之为软中断。
内核基本功用:进程管理、文件系统、网络功能,内存管理、驱动程序、安全功能
模式切换:也就是从用户空间<—>内核空间之间的切换,或者进程间的切换,此切换的过程会涉及到一系列的操作,比如:保存现场—>恢复现场,此过程称为上下文切换,此切换的过程会产生一定的开销,现场状态字数据被保存在CPU的寄存器中。
进程Process:运行中的程序的一个副本,同一个程序可以被执行多次
Linux内核存储进程信息的固定格式:task struct,结构体,多个任务的task struct组织的链表:task list,所以进程本质上就是在内存上的一段抽象的数据结构
进程创建
init 初始化进程,负责一切用户空间进程管理的进程
父子关系
进程:每一个进程都由其父进程创建,第一个进程为init,CentOS7为systemd
CentOS 5:SysV init
CentOS 6:upstart
CentOS 7:systemd
fork(),系统调用,当要创建一个新的进程时,由init向内核空间发起一个fork()的系统调用,然后clone()自己的数据(拥有自己的独立内存空间)
进程优先级
0-139:
1-99:实时优先级,数字越大优先级越高
100-139:静态优先级,数字越小优先级越高
Nice值:
-20,19(100<——>139)
140个优先级队列,每个优先级一个队列,每一个优先级队列又分为两个队列,一个是运行队列,一个是过期队列
常驻内存集:不能被置换到交换分区的内存数据
虚拟内存集:可以被置换的数据
IPC:Inter Process Communication,进程间通信
同一主机的通信方式:
signal
shm:shared memory
semerphor
不同主机通信方式:
rpc:remote procecure call
socket:
进程类型:
守护进程daemon:在系统引导过程中启动的进程,跟终端无关的进程
前台进程:跟终端相关,通过终端启动的进程
注意:也可以把在前台启动的进程送往后台,以守护模式运行
进程的分类:
CPU-Bound:CPU密集型
IO-Bound:IO密集型
进程状态
运行态:running
就绪态:ready
睡眠态:
可中断睡眠:interruptable
不可中断睡眠:uninterruptable
停止态:暂停与内存中,但不会被调度,除非手动启动之:stopped
僵死态:zombie

Linux系统上进程查看与管理工具
pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup、nice、renice、killall…

二、进程查看与管理命令

2.1 pstree命令

用户进程树查看,安装包psmisc, yum install -y psmisc即可

2.2 ps命令

列出当前所有进程,这些信息都是从/proc/#/里的文件获取的,#号代表每一个进程ID,每个进程都有独立的文件夹,里面描述了进程相关的所有详细信息
格式:ps [options]
选项有三种风格,无”-“,unix风格,有”-“BSD风格,两个”—“,长选项
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程
用户通过终端启动:与终端相关的进程
选项:BSD风格
a :所有与终端相关的进程
x :所有与终端无关的进程
u:以用户为中心来组织进程状态信息显示
常用组合之一:# ps aux
image.png
输出字段含义解释:
VSZ:虚拟内存集,
RSS:常驻内存集,就是不能被置换到swap交换分区的内存集
STAT:状态,进程运行状态,状态又可以分为如下几种
R:running
S:Interruptable
D:uninterruptable
T:Stoped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,比如shell终端
选项:unix风格
-e:显示所有进程
-f:显示完整格式的进程信息
-F :显示完整格式的进程信息,信息比-f多一些
-H:以层级结构显示进程相关信息
-o:自定义显示字段
o field1,field2…:自定义要显示字段列表,以逗号分开
常用的field:pid,ni,prl,psr,pcpu,stat,comm,tty,ppid,rtprio
常用组合:-ef
常用组合3:-eFH
常用组合4:-eo、axo
image.png
输出字段含义解释:
C:cpu 使用率
PSR:运行在哪颗CPU之上

2.3 pgrep,pkill命令

格式:pgrep [options] pattern
选项
-u uid:显示指定用户的进程
-U uid:显示指定用户的进程
-t TERMINAL:与指定的终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示此进程的子进程
pidof命令:根据进程名,取其PID,#pidof sshd —>#pgrep sshd

2.4 top命令

显示linux系统的进程信息
image.png
排序:在交互式命令下可以通过命令调整输出
P:以占据CPU百分比进行排序
M:以占据内存百分比进行排序
T:以累计占用CPU时间进行排序
1 :可以显示各个CPU核心的利用率
其余交互命令:
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
首部信息:
uptime信息:按”l”键可以显示或屏蔽此行信息,此行信息可以通过uptime命令获取,uptime:显示系统 时间、运行时长以及平均负载,过去1分钟、5分钟、15分钟的平均负载,等待运行的进程队列长度
task及cpu信息:按”t”键可以显示或屏蔽此行信息
内存信息:按”m”键可以显示或屏蔽此行信息
选项:
-d #:指定刷新时间间隔,默认3秒
-b:以批次方式显示
-n #:显示多少批次

2.5 htop命令

系统不自带此命令,此命令同top没有较大区别,只是使用方法有一定的区别,可以理解为top工具的增强版本,需要额外安装此工具,yum install -y htop
选项:
-d #:指定延迟时间间隔
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
子命令:
l:显示选定的进程打开文件
s:跟踪选定的进程的系统调用
t:以层级关系显示各个进程状态
a:将选定的进程绑定至某个指定的CPU核心

2.6 vmstat命令

vmstat [options] [delay [count]]
image.png
procs:
r:等待运行的进程的个数,CPU上等待运行的任务的队列长度
b:处于不可中断睡眠态的进程个数,被阻塞的任务队列的长度
memory:
swpd:交换内存使用总量
free:空闲的物理内存总量
cache:用于cache的内存总量
buffer:用于buffer的内存总量
swap:
si:数据进入swap的数据速率(kb/s)
so:换出,数据离开swap的速率(kb/s)
io:
bi:从块设备读入数据到系统(内存)的速率(kb/s)
bo:保存数据到块设备的速率(kb/s)
system:
in:interrupts,中断速率
cs:上下文切换的速率context switch
cpu:
us:用户空间所占据时间百分比
sy:系统调用所用时间百分比
id:空闲百分比
wa:等待io百分比
st:被偷走的百分比
选项:
-s:显示内存统计数据

2.7 pmap命令

显示一个进程的内存映射表
pmap [OPTIONS] PID
选项:
-x:详细信息
另一种查看方式:cat /proc/PID/maps

2.8 glances命令

系统不带此命令,需安装,yum install -y glances,同top类似
常用选项:
-b:以Byte为单位显示网卡数据速率
-d:关闭磁盘IO模块
-m:关闭mount模块
-n:关闭network模块
-t #:刷新时间间隔
-1:每个CPU的相关数据单独显示
-o:指定输出格式
-o {HTML|CSV}:输出格式:
-f /PATH/TO/SOMEDIR:设定输出文件的位置
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
客户端模式:
glances -c IPADDR,监听某个IP上

2.9 dstat命令

dstat [-afv] [options][delay[count]]
常用选项:
-c,显示CPU的相关信息
-d,显示磁盘的相关信息
-g,显示page相关的统计数据
-m,内存统计数据
-n,网络的相关统计数据
-p,进程的相关统计数据
-r,IO请求的相关统计数据
-s,sawp的相关统计数据
—tcp
—udp
—raw
—socket
—ipc
—top-cpu;显示最占用cpu的进程
—top-io:最占用IO的进程
—top-mem:最占用内存的进程
—top-lantency:延迟最大的进程

3.10 kill命令

终止进程,向进程发送信号,用于向进程发送信号,以实现对进程的管理
显示当前系统的可用信号
# kill -l [signal]
每个信号的标识方法有三种
1、信号的数字标识
2、信号的完整名称
3、信号的简写名称
向进程发送信号
kill [-s signal | -SIGNAL] pid
常用信号:
1 SIGHUP:无需关闭进程而让其重读配置文件
2 SIGINT:终止正在运行的进程,同Ctrl +C功能一样
9 SIGKILL:杀死运行中的进程(强制杀死,)
15 SIGTERM:终止正在运行中的进程(优雅终止)
18 SIGCONT:继续暂停的进程,可以把在后台的程序调回前台
19 SIGSTOP:暂停程序,同Ctrl+Z
image.png

3.11 killall命令

根据进程名来杀死进程
killall [-SIGNAL] PSNAME
image.png

三、jobs作业管理以及优先级nice调整

3.1 前后台作业调度

前台作业(foregroud):通过终端启动,且启动后会一直占据终端
后台作业(background):可以通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行于后台,被送往后台的作业并没有运行,而是处于停止状态,使用bg命令可以在后台运行
1、运行中的作业
Ctrl+z
2、尚未启动的作业
# COMMAND &
注意:此类作业虽然被送往后台,但其依然与终端相关,如果希望把送往后台的作业剥离与终端的关系
使用# nohup COMMAND &
查看所有作业:
# jobs
实现作业控制的常用命令
# fg [[%]JOB_NUM],把指定的作业调回前台
image.png
# bg [[%]JOB_NUM],把送往后台的作业在后台继续运行
image.png
# kill %JUB_NUM,终止指定的作业
image.png

3.2 调整进程优先级

可以通过nice值调整的优先级范围:100-139
分别对应于:-20,19
进程启动时,其nice值默认为0,其优先级是120
nice命令:
已指定的nice值启动并运行命令
# nice [OPTIONS] [COMMAND [ARGU]…]
# nice -n NICE_VALUE COMMAND,以指定nice值运行
注意:仅管理员可以调低nice值
[root@scxiang ~]# nice -n -5 top
image.png
renice命令:
renice [-n ] NICE_VALUE PID 调整运行进程的nice值
查看nice值和优先级,ps命令即可查看
未涉及到命令:sar,tsar,iostat,iftop,nethog,…