进程管理
进程概念:一个程序在其自身的虚拟地址空间中的一次执行活动。
linux中的进程
在多用户多任务的linux系统中,每个进程都与运行的用户和组相关联,除了进程识别号PID外,在进程控制块PCB中每个进程还有另外4个与用户和组相关的识别号。
RUID:实际用户识别号
RGID:实际组识别号
EUID:有效用户识别号
EGID:有效组识别号
RUID、RGID是用来识别正在运行此进程的用户和组。EUID、EGID用来确定一个进程对其访问的文件的权限和优先权。
进程的类型
交互进程:有一个shell启动的进程,交互既可以在前台运行,也可以在后台运行。
批处理进程:不同于特定的终端相关联,提交到等待队列中顺序执行的进程。
守护进程:在linux启动时初始化,需要时运行与后台的进程。
进程的启动方式
(1.)手工启动
前台启动:手动启动一个进程的最常用方式。
后台启动:使用&命令。
(2.)调度启动
查看进程
命令 | 说明 |
---|---|
ps | 查看进程的详细信息 |
pgrep | 通过模式匹配查找进程id |
pidof | 通过进程名获取进程的pid |
ps 格式:ps [选项]
参数:
选项 | 说明 | 选项 | 说明 |
---|---|---|---|
a | 显示所有进程 | f/-H | 显示进程树,等价于–forest |
e | 在命令后显示环境变量 | w/-w | 宽行输出,通常用于显示完整的命令行 |
u | 显示用户名和启动时间等信息 | -e | 显示所有进程 等价于–A |
x | 显示没有控制终端的进程 | -f | 完全显示,增加用户名,ppid,进程起始时间 |
o/-o | 用户自定义输出 | –sort<order> | 指定按那些列排序 |
ps输出的消息含义
输出项 | 说明 | 输出项 | 说明 |
---|---|---|---|
PID | 进程号 | TIME | 进程自从启动以来占用cpu的时间 |
PPID | 父进程的进程号 | USER | 用户名 |
TTY | 进程从哪个终端启动 | %CPU | 占用cpu时间与时间的百分比 |
STAT | 进程的当前状态 | %MEM | 占用内存与系统内存总量的百分比 |
START | 进程开始执行的时间 | SIZE | 进程代码大小+数据大小+栈空间大小 KB |
VSZ | 进程占用的虚拟内存空间 KB | COMMAND/CMD | 进程的命令名 |
RSS | 进程所占用的内存的空间 KB |
进程状态STAT一栏表示状态的字符含义
状态 | 说明 |
---|---|
R | 进程正在执行中 |
S | 进程处于睡眠状态 |
T | 追踪或停止 |
Z | 僵尸进程,进程已经被终止,但其父进程并不知道,没有妥善处理 |
W | 进程没有固定的pages |
< | 高优先级的进程 |
N | 低优先级的进程 |
杀死进程
发生以下情况需要杀死进程
- 进程占用了过多的cpu时间
- 进程锁住了一个终端,使得前台进程无法运行
- 进程运行时间过长,但没有预期效果或者无法正常退出
- 进程产生了过多的到屏幕或磁盘文件的输出
进程信号
概念:进程信号是在软件层次上对中断机制的一种模拟,进程信号是最基本的进程间通信方式,可以在进程之间直接发送。
使用kill -l
或 man 7 signal
可以查看可以的进程信号。
常用进程信号说明
信号 | 数值 | 用途 |
---|---|---|
SIGHUP | 1 | 重读配置文件 |
SIGINT | 2 | 从键盘上发出的强行终止信号 ctrl+c |
SIGKILL | 9 | 结束接受信号的进程 强行杀死进程 |
SIGTERM | 15 | 正常的终止信号 |
可以发送进程信号的命令
命令 | 说明 |
---|---|
kill | 通过指定进程的PID为进程发送进程信号 |
killall | 通过指定进程的名称为进程发送进程信号 |
pkill | 通过模式匹配为指定的进程发送进程信号 |
进程控制
概念:控制当前正在运行的进程的行为。
进程控制常用命令:
命令或快捷键 | 功能说明 |
---|---|
cmd& | 命令后的&符号表示该命令放到后台执行 |
nohup cmd & | 将该命令放到后台运行,用户注销后依然执行 |
ctrl+d | 终止一个正在前台运行的进程 正常 |
ctrl+c | 终止一个正在前台运行的进程 强行 |
ctrl+z | 挂起一个正在前台运行的进程 |
jobs | 显示后台作业和被挂起的进程 |
bg | 在后台恢复运行一个被挂起的进程 |
fg | 在前台恢复一个被挂起的进程 |