进程管理
概念
进程
-
概念:进程表示可执行程序运行后形成的一个实例,由内存地址空间、安全属性、代码的执行线程以及进程状态组成
-
父/子进程
- 父进程:一个程序执行时会成为一个进程,该进程即为父进程;
- 子进程:父进程通过
fork()
函数创建新进程,该进程即为子进程
-
特点
-
父进程
- 子进程运行期间通常父进程会处于死眠状态,等待子进程运行完成(需要调用
wait()
函数) - 子进程运行完成后会释放大部分资源,只保留下一个条目信息(进程的退出状态,
PID
值)以告诉父进程;若父进程不用wait()
或者waitpid()
函数以等待子进程运行完成,读取子进程的退出状态后删除条目,则该子进程一直存在(称为僵尸进程),直到父进程结束,由init
进程进行删除
- 子进程运行期间通常父进程会处于死眠状态,等待子进程运行完成(需要调用
-
子进程会继承父进程部分信息
- 安全性身份、权限:继承UID、GID信息以及特殊权限
- 数据:继承程序代码、环境变量
- 文件描述符:
-
进程状态
- 状态类型
- 运行态:Running,进程正在 CPU 上运行或者在队列中等待运行
- 阻塞态:Waiting/Blocked,死眠状态,进程等待某个事件触发运行
- 暂停态:Stopped,进程被暂停运行
- 僵尸态:Zombie,子进程已结束,但父进程未清除该子进程
- 状态符号
-
主状态
R
:正在运行或者等待运行D
:死眠状态,不可中断;通常等待I/O
S
:死眠状态,可中断T
:进程被用户或程序指定暂停t
:进程被调试器暂停Z
:僵尸进程X
:进程已结束
-
附加状态
<
:CPU调用优先级高N
:CPU调用优先级低L
:进程部分内存锁定,不能放进磁盘内s
:表示进程为父进程I
:多线程+
:表示前后进程组,接收用户输入值
-
ps
概念
-
ps
命令拥有 Unix、BSD以及GNU三种风格,不同风格的参数以及参数格式都不一样 -
Unix风格
- Unix风格参数需要在前面加上单破折线
- 字段信息
UID
:运行该进程的用户PID
:进程号PPID
:父进程的进程号C
:CPU利用率PRI
:进程优先级STIME
:进程的启动时间TTY
:运行该进程的终端编号TIME
:运行该进程的累计时间CMD
:进程名称或者执行该进程的命令- 不常用字段
NI
:优先级调整值,ADDR
:内存地址SZ
:WCHAN
:显示进程正在等待内核函数的名称SID
PGID
-
BSD风格字段信息
- BSD风格参数前面不用加破折线
- 字段信息
USER
:运行该进程的用户PID
:进程号%CPU
:该进程的CPU利用率%MEM
:该进程的内存利用率VSZ
:虚拟内存大小RSS
:占用物理内存大小TTY
:运行该进程的终端编号STAT
:进程状态START
:进程的启动时间TIME
:运行该进程的累计时间COMMAND
:启动该进程的命令及参数
选项
-
概念
-
真实、有效用户/用户组
- 真实用户组:启动该程序的实际用户
- 有效用户组:实际用户借用某个有该程序权限的用户来启动程序,有权限的用户为有效用户
-
若需要使用筛选选项来筛选多个进程,则用逗号相隔
-
没有终端的进程是指后台进程,系统自己运行的进程
-
不同风格的选项可以混合使用
-
-
Unix常用参数
-
进程筛选进程
-e
-A
:显示所有进程,-e
和-A
等效-a
:显示当前终端的所有进程,不包括没有终端的进程和会话领导者-T
:显示当前终端的所有进程,不包括没有终端的进程-d
:显示所有进程,不包括会话领导者-x
:显示没有终端的所有进程-r
:只显示正在运行的进程
-
字段筛选进程
-C
:按命令名关键词筛选进程-t
:按终端编号筛选进程-G
-g
:-G
按真实用户组ID、-g
按有效用户组ID来筛选进程-U
-u
:-U
按真实用户ID、-u
按有效用户ID来筛选进程-p
--ppid
:按PID
或者PPID
来筛选进程
-
输出格式
-F
-f
:完整格式输出,信息侧重于进程的启动命令、参数等信息-l
:完整格式输出,信息侧重于进程的状态、优先级等信息-H
:用缩进方式以显示父子进程关系
-
-
BSD常用参数
-
进程筛选进程
a
:显示所有终端关联的进程r
:显示正在运行的进程T
:显示当前终端的所有进程,不包括没有终端的进程x
:显示没有终端的所有进程
-
字段筛选进程
- 配合Unix的字段进程使用
-
输出格式
f
:用 ASCII 树状图形显示进程层级关系l
:完整格式输出,信息侧重于进程的状态、优先级等信息u
:用户导向格式,显示USER、%CPU、%MEM等字段
-
pstree
- 以树状格式显示正在运行中的进程,比 ps 命令更加直观
- 安装
apt-get install psmisc
- 语法
pstree
[option]
[pid or username]
- 选项
-a
:显示命令参数-p
:显示每个进程的PID-c
:强制展开进程内相同的子树-n
:按照 PID 顺序列出进程树-u
:显示进程的所有者
pgrep
- 查找进程,判断进程是否存活
- 语法
pgrep
[option]
[pid or username]
- 选项
-l
:列出 PID 对应的进程名-u
:指定用户名筛选出该用户启动的 PID-P
:指定 PPID 筛选出 PID-n
:列出最新的进程 PID-o
:列出最老的进程 PID
kill
- 向进程发送终止信号
- 常用信号
SIGHUP(1)
:终止进程,通知进程重新加载配置文件或者重新初始化SIGINT(2)
:终止进程,中断当前运行的前台程序,跟Ctrl + C
效果相同SIGQUIT(3)
:终止进程+核心转储,强制退出程序并保存崩溃信息(core dump文件),跟Ctrl + \
效果相同SIGKILL(9)
:强制终止进程,强制退出程序,但会导致资源未释放、清理等问题SIGTERM(15)
:终止进程,清除资源后再退出程序SIGSTOP(19)
:暂停进程SIGCONT(18)
:恢复程序的运行
- 选项
-l
:列出所有kill信号-n
:指定信号编号,如-n 1
-n 2
-1
-2
-s
:指定信号字符串,如-s HUP
-s INT
killall
- 指定进程名来中断一个或多个进程,无需找到 PID 再终止进程,但可能
- 需要完全匹配进程名才能终止进程
pkill
- 可以迭代终止父子进程,同时提供更多的筛选选项
- 选项
-t
:按终端名筛选进程-u
-U
:按有效用户ID、真实用户ID筛选进程-g
-G
:按有效用户组ID、真实用户组ID筛选进程-x
:精确匹配进程名-f
:匹配完整命令行
top
- 系统资源管理器,查看每个进程使用的资源情况
- 字段
-
统计信息
top
:当前时间up
:运行时间users
:当前登录用户数load average
:系统负载平均值,三个数值分别是 1min、5min、15min前的平均值Task
:进程数量和状态total
:进程总数running
:正在运行的进程数sleeping
:正在休眠的进程数stopped
:停止的进程数zombie
:僵尸进程数
%Cpu
:CPU占用信息us
:用户空间占用CPU的百分比,用户空间是指shell程序、编译器、应用等sy
:内核空间占用CPU的百分比,内核空间是指进程需要向CPU处理的资源ni
:用户进程空间改变过优先级id
:空间CPU占用率wa
:等待I/O的CPU时间百分比hi
si
st
Mem
:内存占用信息total
:内存物理总大小free
:空闲内存量used
:正在使用的内存量buffer/cache
:用作内核缓存的内存量
Swap
:交换区占用信息,该交换区通常是用于内存不够用时,系统将暂时不用的数据存放到硬盘中total
:交换区内存总大小free
:空闲交换区总量used
:正在使用的交换区总量buffer/cache
:缓冲的交换区总量
-
进程信息
PR
:优先级NI
:nice值,值越小越优VIRT
:进程使用的虚拟内存总量RES
:进程使用的物理内存大小SHR
:共享内存大小,单位是 kb
-
- 选项
-d
:指定刷新时间-p
:指定 PID 并仅查看该进程使用的资源情况-S
: