Linux系统的进程管理
一、进程查看命令
1、pstree
用于查看进程树之间的关系,谁是父进程,谁是子进程,可以清楚的看出来是谁创建了谁
用法:
pstree [选项]
选项:
选项 | 作用 |
-A | :各进程树之间的连接以utf8字符来连接,某些终端可能会有错误 |
-P | 同时列出每个进程的PID |
2、ps
显示系统当前进程瞬间运行状态
用法:
ps [选项]
选项:
选项 | 作用 |
-A | 显示现行终端机下的所有进程,包括其他用户的进程 |
-U | 以用户为主的进程状态 |
输出解析:
- `USER`:进程的所有者。
- `PID`:进程的 ID。
- `%CPU`:进程占用的 CPU 百分比。
- `%MEM`:进程占用的内存百分比。
- `VSZ`:进程使用的虚拟内存大小。
- `RSS`:进程使用的物理内存大小。
- `TTY`:进程所在的终端。
- `STAT`:进程的状态,如`S`(休眠)、`R`(运行)、`Z`(僵尸进程)等。
- `START`:进程的启动时间。
- `TIME`:进程运行的时间。
- `COMMAND`:启动进程的命令。
进程状态:
S:休眠
s:父进程
R:运行
Z:僵尸进程(前台程序已死,但后台驻留进程没有正常退出;后果就是占用资源不干活。)
在Linux中,使用 `ps aux` 命令可以查看当前运行的进程及其详细信息。输出的每一列代表不同的信息,其中 **STAT**(或 `S`)列表示进程的**状态(Process State)**,即进程的类型或当前行为。
ps aux输出的进程状态(STAT)详解
其中 STAT 列 的字母组合表示进程的状态,常见的状态组合有:
Ss:会话领导者(`s`),处于可中断睡眠(`S`),如 `bash` 终端进程。
Ssl:多线程(`l`)的会话领导者(`s`),如 `systemd`。
R+:前台运行(`+`)的进程(`R`),如 `top` 命令。
D:不可中断睡眠(`D`),常见于磁盘I/O密集型任务(如 `dd` 命令)。
Z:僵尸进程(`Z`),需要父进程回收资源。
I<:内核空闲线程(`I`),低优先级(`<`)。
如何查看进程状态?
1、ps aux(显示所有进程):
ps aux | grep nginx
输出示例:
root 1234 0.0 0.1 12345 6789 ? S May30 0:00 nginx: worker process
S`表示 nginx 处于可中断睡眠(等待请求)。
2. ps -efj`(显示进程父子关系):
ps -efj
可查看 `PPID`(父进程ID)和 `STAT` 状态。
3. top / htop动态查看进程状态):
top
在 top中,列同样表示进程状态。
ps -elf` 是 Linux 中查看进程信息的常用命令之一,它以长格式(`-l`)和完整格式(`-f`)显示所有进程(`-e`),并提供更详细的进程状态信息。以下是 `ps -elf` 的详细解析:
ps -elf` 命令详解
-e:显示所有进程(等同于 -A)。
-l:长格式输出,显示更多字段(如 F、S、PRI、NI)。
-f:完整格式输出,显示完整的命令行(CMD)和用户信息。
关键字段详解
1. 进程状态(`S` 列)
与 `ps aux` 的 `STAT` 列相同,常见状态包括:
R:运行中(Running)。
S:可中断睡眠(Interruptible Sleep,等待事件)。
D:不可中断睡眠(Uninterruptible Sleep,通常与磁盘I/O相关)。
Z:僵尸进程(Zombie)。
T:已停止(Stopped,如被 `SIGSTOP` 暂停)。
I:空闲(Idle,内核线程)。
2. 优先级(`PRI` 和 `NI`)
PRI:进程的实际优先级(由内核动态调整,数值越小优先级越高)。
NI:Nice值(用户可调整的优先级修正值):
20:最高优先级(抢占更多CPU)。
19:最低优先级(CPU友好,适合后台任务)。
3. WCHAN 列
显示进程当前等待的内核事件(如 `poll`、`futex`)。
若为 `-`,表示进程正在运行或无需等待。
常用组合命令
1. 查找特定进程
ps -elf | grep nginx
2. 查看进程树(父子关系)
ps -elf --forest
3. 按CPU或内存排序
ps -elf --sort=%cpu # 按CPU降序
ps -elf --sort=-%mem # 按内存降序
4. 查看僵尸进程
ps -elf | grep Z
3、pgrep
查看进程的信息,包括进程是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。 pgrep通过匹配其程序名,找到匹配的进程
选项:
-l | 同时显示进程名和PID |
-o | 当匹配多个同一命令启动的进程时,显示进程号最小的那个 |
注意:#pgrep命令用来查找进程的信息,通常会和kill命令来连用,在指定条件下kill问题进程