七、Linux中的进程管理
1.进程定义
1)进程的定义
- 进程是静态的代码文件;
- 进程是指程序运行时的形态;
- 进程是程序的一个副本;
- 进程是有生命周期的(准备期,运行期,终止期)
2)进程和线程
- 进程是资源调用的最小单位;
- 线程是进程的最小单位
程序执行流是从上到下贯穿执行的;
当进程是多任务,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的。
#进程状态
状态 | 含义 |
---|---|
#R(TAKS_RUNNING) | 可执行态(running,ready) |
#S(TAKS_INTRRUPTABLE) | 可唤醒休眠 |
#D(TAKS_UNINTRRUPTABLE) | 不可唤醒休眠 |
#T(TASK_STOP) | 暂停状态 |
#Z(EXIT_ZOMBIE) | 僵死态 |
2.进程查看命令
gnome-system-monitor
# 图形进程查看工具
ps
# 进程查看,ps命令的三种执行风格(UNIX BSD GNU)
命令 | 功能 |
---|---|
###以下为BSD风格### | |
a | 与终端相关的进程 |
x | 与终端无关的进程 |
u | 用户信息归类的查看方式 |
f | 进程层级关系 |
o | 显示指定参数(pid,comm,nice,pri(优先级),pcpu(父级cpu),ppid,stat(状态),user,group) |
###以下为UNIX风格### | |
-e | 显示所有进程 |
-f | 显示信息的完整格式 |
-H | 显示进程的层级结构 |
-o | 显示指定参数 |
--sort= | 整理 |
[root@localhost ~]# ps ax -o %cpu,user --sort=-%cpu
#以cpu顺序倒序查看用户使用cpu情况
ps ax
显示信息:
#PID 进程id
#TTY 进程用到的终端
#STAT 进程状态
#TIME 进程占用CPU时间
#COMMAN
ps aux
显示信息如下:
#USER 进程所有人
#PID 进程id
#%CPU 进程使用CPU的用量
#%MEM 进程所用到的内存用量
#VSZ 进程使用的虚拟内存大小
#RSS 进程常驻内存中的数据大小
#TTY 进程用到的终端
#STAT 进程状态
#START 进程运行时长
#TIME 进程占用CPU时长
#COMMAND 进程名称
pgrep
#进程过滤
命令 | 功能 |
---|---|
-u | uid显示指定用户进程 |
-U | user显示指定用户进程 |
-t | tty显示指定终端进程 |
-l | 显示进程名称 |
-a | 显示进程的完整名称 |
-P | 显示进程的子进程 |
pidof vim
#查看vim的pid
top
#动态进程查看
top
命令参数:
命令 | 功能 |
---|---|
top -d | 指定刷新频率 |
top -b | 以批次方式显示 |
top -n | 指定显示的批次数量 |
top
内部命令:
命令 | 功能 |
---|---|
P | CPU排序 |
M | 内存排序 |
T | 累计cpu时间排序 |
l | 关闭/开启 uptime信息 |
t | 关闭/开启cpu&task |
s | 指定刷新频率 |
k | 操作进程 |
u | 查看指定用户进程 |
#PID 进程id
#USER 进程所有者的用户名
#PR 优先级
#NI nice值,负值表示高优先级,正值表示低优先级
#VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
#RES 进程使用的、未被患处的物理内存大小,单位kb。RES=CODE+DATA
#SHR 共享内存大小,单位kb
#S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
#%CPU 上次更新到现在的CPU时间占用百分比
#%MEM 进程使用的物理内存百分比
#TIME+ 进程使用的CPU时间总计,单位1/100s
#COMMAND 命令名/命令行
3.进程优先级
系统是多任务多用户的操作模式,任务的重要性是有区分的。用优先级确定任务的重要性
“优先级”范围:0–139;内核自控(实时)优先级范围:0-99;用户可控优先级范围:100-139
renice -n -5 pid #更改优先级,-5可为-20-19中任意,约负优先级越高
nice -n -5 cat #指定优先级打开进程
#实验
[root@localhost ~]# renice -n -5 3129
3129 (process ID) old priority 0, new priority -5
[root@localhost ~]# ps ax -o pid,nice,command | grep cat
2321 0 /usr/libexec/gsd-print-notifications
3017 0 /usr/libexec/gsd-print-notifications
3129 -5 /usr/bin/gnome-software --gapplication-service
70936 0 grep --color=auto cat
注:
ps ------> pri -----> 0-39
nice ---------------> -20-19
priority -----------> 0-139(100-139),0-99系统分配
STAT标识功能:
命令 | 功能 |
---|---|
S | Sleeping |
< | 优先级高 |
s | 顶级进程 |
T | Stop |
N | 优先级低 |
R | running |
l | 在系统中有存储空间 |
+ | 运行在前台 |
#练习
[root@localhost /]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
su 68674 S 0
bash 68680 S 0
top 69230 T 0
ps 70991 R+ 0
[root@localhost /]# renice -n -5 68680 #修改优先级
68680 (process ID) old priority 0, new priority -5
[root@localhost /]# ps -o comm,pid,stat,nice
COMMAND PID STAT NI
su 68674 S 0
bash 68680 S< -5 #对应的NI值改变,STAT标识改变
top 69230 T 0
ps 71026 R<+ -5
4.进程前后台调用
Ctrl+z 把占用shell的进程打入后台挂起
命令 | 功能 |
---|---|
bg | 把后台挂起的进程运行起来 |
fg | 把后台进程调回前台 |
& | 运行进程在后台 |
jobs | 查看当前shell中在后台的所有工作 |
#实验
[root@localhost /]# jobs
[root@localhost /]# gedit
^Z
[1]+ Stopped gedit
[root@localhost /]# jobs
[1]+ Stopped gedit
[root@localhost /]# bg
[1]+ gedit &
[root@localhost /]# jobs
[1]+ Running gedit &
[root@localhost /]# cat
^Z #后台挂起
[2]+ Stopped cat
[root@localhost /]# jobs
[1]- Running gedit &
[2]+ Stopped cat
[root@localhost /]# bg 2
[2]+ cat &
[root@localhost /]# jobs
[1]- Running gedit &
[2]+ Stopped cat
[root@localhost /]# bg 2
[2]+ cat &
[root@localhost /]# jobs
[1]- Running gedit &
[2]+ Stopped cat
[root@localhost /]# cat &
[3] 78296
[root@localhost /]# jobs
[1] Running gedit &
[2]- Stopped cat
[3]+ Stopped cat
[root@localhost /]# fg 1
gedit
^C
[root@localhost /]# fg
cat
^C #结束进程
[root@localhost /]#
5.进程信号
进程信息
信号 | 含义 |
---|---|
1 | 重新加载系统配置文件(source)—> 软件热处理 |
2 | 清空内存中的进程数据 —>Ctrl+c |
3 | 清空内存中的鼠标Ctrl+/ |
9 | 强制关闭进程(不能被阻塞) |
15 | 正常关闭进程(会被阻塞) |
18 | 运行被暂停的进程 |
19 | 暂停进程(不会被阻塞) |
20 | 暂停进程(会被阻塞) |
进程信号控制工具
kill 进程信号 pid
killall 进程信号 进程名字
pkill 进程信号 进程条件
#实验
[root@localhost /]# ps
PID TTY TIME CMD
68674 pts/0 00:00:00 su
68680 pts/0 00:00:00 bash
78083 pts/0 00:00:00 dbus-launch
78286 pts/0 00:00:00 cat
78708 pts/0 00:00:00 vim
78709 pts/0 00:00:00 vim
78710 pts/0 00:00:00 vim
78719 pts/0 00:00:00 gedit
78734 pts/0 00:00:00 ps
[root@localhost /]# kill -9 78708
[root@localhost /]# ps
PID TTY TIME CMD
68674 pts/0 00:00:00 su
68680 pts/0 00:00:00 bash
78083 pts/0 00:00:00 dbus-launch
78286 pts/0 00:00:00 cat
78709 pts/0 00:00:00 vim
78710 pts/0 00:00:00 vim
78719 pts/0 00:00:00 gedit
78744 pts/0 00:00:00 ps
[3] Killed vim
[root@localhost /]# killall -9 vim
[4] Killed vim
[5]- Killed vim
[root@localhost /]# ps
PID TTY TIME CMD
68674 pts/0 00:00:00 su
68680 pts/0 00:00:00 bash
78083 pts/0 00:00:00 dbus-launch
78286 pts/0 00:00:00 cat
78719 pts/0 00:00:00 gedit
78746 pts/0 00:00:00 ps
[root@localhost ~]# pkill -9 -u lee #结束进程中用户名为lee的进程
#结果如下:
6.system守护进程
远程操作主机:
ssh 远程主机ip -l 远程主机用户
守护进程:替内核分担程序控管的程序,通常pid为1。
systemctl的用法:
命令 | 功能 |
---|---|
start | 开启 |
stop | 关闭 |
status | 查看状态 |
reload | 重新加载 |
restart | 重新启动服务 |
enable | 设定服务开机启动 |
enable --now | 设定服务开机启动 并当前开启 |
disable | 设定服务开机不启动 |
list-units | 查看系统所有服务当前状态 |
list-units-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 | |
5 | G+Network |
6 | REBOOT |