七、Linux中的进程管理
7.1、进程和线程定义
程序是静态的代码文件
进程:进程是指程序运行时的形态,是程序的一个副本,进程是有生命周期的(准备期,运行期,终止期)
线程:当程序是多任务的,cpu是多核心,多任务同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的
7.1.1、进程和线程的关系
进程是资源调用的最小单位
线程是进程的最小单位
7.1.2、进程状态
R (TASK_RUNNING) #可执行态
S (TASK_INTERRUPTABLE) #可唤醒休眠
D (TASK_UNINTERRUPTABLE) #不可唤醒休眠
T (TASK_STOP) #暂停状态
Z (EXIT_ZOMBIE) #僵死态(运行完毕,但仍占用系统资源,需手动结束)
7.2、进程查看命令
图形中进程调用命令
gnome-system-monitor
ps #进程查看
#ps命令的三种执行风格unix、bsd、GUN
指令:ps 参数
7.2.1、bsd风格
a #与终端相关的进程
x #与终端无关的进行
u # 用户信息归类的查看方式
f #进程层级关系
o #显示指定参数 pid 、comm、nice、pri、papu、ppid、stat、user、group
例:只显示与终端相关和无关进程的pid和comm
指令:ps axo pid,comm
7.2.2、unix风格
-e #显示所有进程
-f #显示信息的完整格式
-H #显示进程的层级结构
-o 显示指定参数
–sort= #排序
例:显示系统所有进程的完整格式
指令:ps -ef
例:按照占用CPU进行排序
指令:ps ax --sort=%cpu
注:CPU正序排序指令:ps ax --sort=-%cpu
7.2.3、指令:ps ax 显示信息解释
PID #进程id
TTY #进程用到的终端
STAT #进程状态
TIME #进程占用CPU时长
COMMAND #进程名称
7.2.4、指令:ps aux 显示信息解释
USER #进程所有人
PID #进程id
%CPU #进程占用CPU量
%MEN #进程占用内存量
VSZ #进程使用的虚拟内存大小
RSS #进程常驻内存中的数据大小
TTY #进程用到的终端
STAT #进程状态
START #进程运行时长
TIME #占用CPU时长
COMMAND #进程名称
例:倒序查看进程占用CPU量,只看占用量和进程名字
指令:ps ax -o %cpu,comm --sort=%cpu
例:正序查看占用CPU前五位的pid,只显示pid
指令:ps ax -o pid --sort=-%cpu | head -n6 | tail -n5
或者:ps ax -o pid --sort=-%cpu | grep -v PID | head -n5
7.2.5、pgrep进程过滤
-u uid #显式指定用户进程
-U user #显示指定用户进程
-t tty #显示指定终端进程
-l #显示进程名称
-a #显示进程的完整名称
-P #显示进程的子进程
7.2.6、pidof vim
查看vim的pid
7.2.7、top动态进程查看
top 参数
top中动态信息解释:
top
22:50:57 #系统时间
up 5:33 #运行时长
1 user #系统中有一个用户登录
load average: 0.00, 0.00, 0.00
三个时间分别表示1min,5min,15min的负载程度。
Tasks
309 total #任务总量
2 running #正在运行
307 sleeping #休眠数量
0 stopped #被暂停数量
0 zombie #僵死数量
%Cpu(s)
6.8 us #用户空间
2.4 sy #内核空间
0.0 ni #nice值调整时间
89.5 id #空闲时间、
0.0 wa #等待io时间
1.4 hi #处理硬件中断时间
0.0 si #处理软件中断时间
0.0 st #被偷走的时间(vm使用时间)
Mib men
1806.1 total #总量
102.9 free #空闲
1074.5 used #占用
628.6 buff/cache #缓存
MiB Swap #交换分区用量
7.2.7.1、命令的参数
-d #指定刷新频率
例:每隔一秒刷新一次,执行tou -d 1
-b #以批次方式显示
-n #指定显示的批次数量
例:以两个批次显示,执行top -b -n 2
7.2.7.2、top内部指令
P #cpu排序
M #内存排序
T #累计占用CPU时间排序
l #关闭/开启uptime信息
t #关闭/开启cpu&task
s #指定刷新频率
k #操作进程
u #查看指定用户进程
注:执行top之后只需按响应键查看与之对应信息
7.3、进程优先级
系统是多任务多用户的操作模式
任务的重要性有区分
通过“优先级”确定任务的重要性
优先级范围:0-139
内核自控优先级范围:0-99
用户可控优先级范围:100-139
nice值范围:-20 到19
renice指令可以更改用户优先级
例:
(1)监控cat指令:
watch -n 1 “ps ax -o pri,nice,pid,comm | grep cat”
(2)root下执行cat,获取pid
(3)执行指令renice -n 5 40346,(40346为cat指令pid)可以把cat指令优先级调整为5。
进程状态查看
watch -n 1 “ps ax -o pri,nice,pid,comm,stat | grep cat”
SN+表示cat指令进程状态
S #sleeping
< #优先级高
s #顶级进程
T #stop
N #优先级低
R #running
+ #运行在前台
7.4、进程前后台调用
< ctrl >+< z > #把占用shell的进程打入后台挂起
jobs #查看当前shell中在后台的所有工作
bg #把后台挂起程序运行起来
fg #把后台进程调回前台
& #运行进程在后台
例:
编辑文件file,使其运行在后台指令:gedit file &
7.5、进程信号及信号控制
7.5.1、进程信号
执行man 7 signal查看信号解释
可控部分:
1 #重新加载系统配置文件(source)
2 #清空内存中的进程数据
3 #清空内存中的鼠标(ctrl+\)
9 #强行结束进程(不能被阻塞)
15 #正常关闭进程(会被阻塞)
18 #运行被暂停的进程
19 #暂停进程(不会被阻塞)
20 #暂停进程(会被阻塞)
例:
(1) gedit编辑一个file,< ctrl >+< z >打入后台。
(2) bg后台运行,ps可以查看gedit进程的id。
(3) 可以通过指令kill -15 id 关闭后台进程gedit
7.5.2、进程信号控制工具
指令格式:
kill 进程信号 pid
killall 进程信号 进程名字
pkill 进程信号 进程条件
例:打开三个vim,crtl+z打入后台
kill -9 56817 结束单个vim
killall -9 vim 结束全部vim
例:
素材:su - fake 执行三次
监控:watch -n 1 “ps ax -o user,comm | tail -n 10”
执行pkill -u fake发现只结束掉一个
执行pkill -9 -u fake全部结束
注:-u表示结束用户
7.6、系统守护进程及systemctl命令的应用
7.6.1、守护进程
守护进程代替内核分担程序管控,通常pid为1。
systemd----->systemctl
systemctl 管理系统服务
服务指在系统中开启的共享系统资源到网络中的程序
systemctl命令的用法
格式:systemctl +以下功能
start #开启
stop #关闭
status #查看状态
reload #重新加载
restart #重新启动服务
enable #设定服务开机启动
enable --now #设定服务开机启动并当前开启服务
disable #设定服务开机不启动
list-units #查看系统所有服务器当前状态
list-unit-files #查看服务器开机状态
list-dependencies #列出服务依赖性
mask #冻结服务
unmask #解锁
set-default #设定系统运行模式
#multi-user.target 无图形网络模式
#graphical.target 有图形网络模式
get-default #查看系统运行模式
#系统运行模式
# 0-6
# 0 POWEROFF
# 1 single 单用户模式,用来改密码
# 2 noG+NETWORK
# 3
# 4
2-4为无图形网络模式
# 5 G+NETWORK
5为有图形模式
# 6 REBOOT
实验:
开启监控;watch -n 1 systemctl status sshd
命令行输入:systemctl stop sshd执行后状态为dead
命令行输入:systemctl start sshd执行后状态为active
通过命令查看sshd状态:systemctl status sshd
仍旧为active
例:设定sshd.service服务开机不启动
指令:systemctl disable sshd.service
注:若当前sshd.service正在运行,则disable之后不会关闭,但是再次开机不会启动。若要关闭当前服务且开机不启动,执行
systemctl disable --now sshd.service
例:查看系统所有服务器当前状态
指令:systemctl list-units
例:打开无图形网络模式
指令:systenctl set-default muti-user.target
效果:开机之后进入无图形模式
7.7、系统中的登陆审计
w #显示正在登陆的账号
## -i 显示登陆来源
## 获取登录信息来自:/var/run/wtmp
last #登陆成功现已退出的
## /var/log/utmp
lastb #试图登录但未成功
## /var/log/btmp
例:
ifconfig获取ip
ssh -l root 127.0.0.1登陆
w -i 查看登录来源
exit退出之后,w -i 查看发现没有用户登陆
last查看登录成功现已退出
若执行ssh -l root 127.0.0.1之后密码输入错误,则可通过lastb查询到试图登录但未成功记录
注:若想清除正在登陆信息,执行> /var/log/wtmp
执行之后,再执行last查看
登陆信息清除