进程管理
概念
进程
-
概念:进程表示可执行程序运行后形成的一个实例,由内存地址空间、安全属性、代码的执行线程以及进程状态组成
-
父/子进程
- 父进程:一个程序执行时会成为一个进程,该进程即为父进程;
- 子进程:父进程通过
fork()函数创建新进程,该进程即为子进程
-
特点
-
父进程
- 子进程运行期间通常父进程会处于死眠状态,等待子进程运行完成(需要调用
wait()函数) - 子进程运行完成后会释放大部分资源,只保留下一个条目信息(进程的退出状态,
PID值)以告诉父进程;若父进程不用wait()或者waitpid()函数以等待子进程运行完成,读取子进程的退出状态后删除条目,则该子进程一直存在(称为僵尸进程),直到父进程结束,由init进程进行删除
- 子进程运行期间通常父进程会处于死眠状态,等待子进程运行完成(需要调用
-
子进程会继承父进程部分信息
- 安全性身份、权限:继承UID、GID信息以及特殊权限
- 数据:继承程序代码、环境变量
- 文件描述符:
-
进程状态
- 状态类型
- 运行态:Running,进程正在 CPU 上运行或者在队列中等待运行
- 阻塞态:Waiting/Blocked,死眠状态,进程等待某个事件触发运行
- 暂停态:Stopped,进程被暂停运行
- 僵尸态:Zombie,子进程已结束,但父进程未清除该子进程
- 状态符号
-
主状态
R:正在运行或者等待运行D:死眠状态,不可中断;通常等待I/OS:死眠状态,可中断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:显示进程正在等待内核函数的名称SIDPGID
-
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时间百分比hisist
Mem:内存占用信息total:内存物理总大小free:空闲内存量used:正在使用的内存量buffer/cache:用作内核缓存的内存量
Swap:交换区占用信息,该交换区通常是用于内存不够用时,系统将暂时不用的数据存放到硬盘中total:交换区内存总大小free:空闲交换区总量used:正在使用的交换区总量buffer/cache:缓冲的交换区总量
-
进程信息
PR:优先级NI:nice值,值越小越优VIRT:进程使用的虚拟内存总量RES:进程使用的物理内存大小SHR:共享内存大小,单位是 kb
-
- 选项
-d:指定刷新时间-p:指定 PID 并仅查看该进程使用的资源情况-S: