8. 进程管理
8.1 进程的概念
进程:应用程序或者数据在系统中按照顺序执行的活动过程,是操作系统架构基础;
本小节内容请学习操作系统原理,如已学习,可跳过不看
OS = kernel + process:进程只能运行在CPU和内存中
进程特性 :动态性 并发性等
CPU分环运行:
- 0环:特权环,运行内核 (内核空间)
- 1-2 环:库文件
- 3环 :进程环(用户空间)
CPU一个时间点只能运行一个程序,按照时间片
例:mkdir: mkdir /data :system call :系统 I/O
task struck:进程的数据结构(存放在内核中)
task struce结构:状态 进程信息和内核栈 运行列表(指令等) MM(内存管理单元)
PID :进程ID号 群组信息 用户信息 文件系统 文件描述符等
MMU:memory mangement unit :内存管理单元
context switch :进程切换,上下文切换
进程内存结构:forbidden:内核空间
program text:指令
data+bss:全局变量
heap:堆空间
shared library :共享库
stack:栈空间,进程运行时调用的数据
thread:线程,轻量级进程
运行进程的模式:多进程模式(每一个请求生成一个进程:进程切换)
单进程多线程:每个线程去响应
lock:死锁,自旋锁等
kernel :内存管理 网络管理 安全管理 驱动管理 进程管理等
进程:父子关系 进程状态 优先级
进程优先级:0-139 数字,共140个优先级
- 0-99 :系统优先级(用户不可控优先级)
- 100-139:nice值(用户可控优先级);-20 到19;
- root用户可以调整nice值;普通用户只能调0-19
高优先级进程:获取更多的CPU运行时长,更优先的让CPU执行
大O标准:O(1) O(n) O(logn) O(2^n) O(n^2)
8.2 进程管理命令
进程分类:
和终端相关的进程:用户进程
和终端无关的进程:内核进程
8.2.1 ps
process status :进程状态查看,运行ps那个时刻系统进程状态;
BSD风格(不使用连字符),sys V风格使用连字符),GNU长选项(使用两个连字符)
- a:显示和终端有关的进程
- u:显示进程用户的信息
- x:显示和终端无关的进程
- -e:显示所有进程信息
- -l:显示进程长格式
- -F:显示进程的完整信息
// 命令:ps au //数据格式解析
USER:该进程是有哪个用户发起的
PPID:父进程号
PID:进程号/proc目录存放着进程相关的信息。
在CentoS7中PID为1的进程是systemd
在CentOS6中PID为1的进程是init进程
%CPU:该进程占用的CPU百分比
%MEM:该进程占用内存的百分比
VSZ:虚拟内存集(计算进程所占物理内存时,物理内存包括共享库的空间)
RSS:常驻内存集(进程中不能被交换出去的)
TTY:运行在哪个终端
STAT:进程状态
D:不可中断睡眠状态
S:可中断睡眠状态
R:运行状态
T:停止状态
z:僵尸状态
s:session leader (会话的领导者)
<:优先级较高的进程(用户不可控)
N:优先级较低的进程(用户可控进程)
1:多线程进程
L:在内存中锁定分页
+:前台进程组中的进程
START:进程启动时间
TIME:该进程在CPU中实际运行的时长
COMMAND:该进程命令名称
//ps -elF :结果解析
//部分解析在上面已经介绍,不再重复,仅介绍几个常用的。
PRI :系统分配的优先级(用户不可更改)
NI:nice值
//调整进程的nice值的命令:
调整正在运行进程nice,(调整nice值就是为了影响系统优先级)
renice [nice number] PID
指定进程运行的nice值(让某个'命令'以指定nice运行)
nice -n [nice_number] COMMAND
8.2.2 top
//top结果解析
第一行:当前系统时间 系统运行时长 登录系统的用户个数 过去1分钟,5分钟,15分钟平均负载
第二行:进程总数 正在运行的进程数 睡眠的进程数 停止状态进程数 僵尸状态进程数
第三行:CPU相关信息(按1键可查看每个CPU的信息):us:用户进程所占CPU百分比 sy:系统进程所占CPU百分比 ni:nice所占CPU百分比 id:空闲进程所占CPU百分比 hi:硬件中断所占CPU百分比 si:软件中断所占CPU百分比 st:被hypervisor偷走的CPU的百分比
第四行:物理内存相关信息
第五行:交换分区相关信息
top交互式命令:
M:按所占内存百分比进行排序
P:按所占CPU百分比进行排序
T:按进程运行时长进行排序
c:是否显示command这一列的完整路径
l:是否显示top第一行
t:是否显示top第二行和第三行
m:是否显示内存的相关信息
k:杀死某个进程
q:退出top进程
8.2.3 其他相关命令
pstree
:查看进程树pgrep
:查看某个进程的PID 号 pgrep process_namepidof
:查看某个进程的PID 号 pidof process_namekill
:杀死某个进程(向进程传递某个信号)- kill -l :查看信号列表
信号列表( 信号:进程间的通信 IPC )
- 1:SIGHUP :不停止服务的情况下,重新读取配置文件,并且应用配置文件中的设置
- 2:SIGINT:(Ctrl+C):中断某个进程
- 9:SIGKILL:强制杀死某个进程
- 15:SIGTERM:终止某个进程(默认信号)
kill 语法:
- kill - sig_number PID
- kill - sig_name PID
- kill %number :杀死后台某个作业,%不能省略
killall
:杀死整个进程树,用法同kill- 前台进程:利用终端执行的进程
- 后台进程:运行执行时不利用终端进行执行的进程
前台 ——> 后台:(前台调入后台)
- Ctrl+z:把正在运行的进程调入后台,并停止运行
&
:启动时直接调入后台运行
jobs
:查看后台运行的作业+
:下一次将要运行-
:下一次将要运行的第二个后台作业kill %1
:杀死后台运行号为1的进程(注意加%)
bg
:把进程调入后台继续运行fg
:把后台进程调入前台继续运行 ‘fg num’