进程管理
进程概念:一个程序在其自身的虚拟地址空间中的一次执行活动。
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 | 在前台恢复一个被挂起的进程 |