进程
进程¶
Linux 中 ps 命令是 Process Status 的缩写,用来列出系统中当前运行的那些进程。
ps 列出的是执行 ps 命令那一时刻那些进程的快照,是静态的。
想要动态显示可以使用 top 或 htop 命令。
Linux 中的进程有 5 种状态:
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中,受阻,在等待某个条件的形成或接收到信号)
- 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
- 僵死(进程已终止,但进程描述符存在,直到父进程调用
wait4()系统调用后释放) - 停止(进程收到
SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU信号后停止运行)
对应到 ps 中 5 种状态码:
- R 运行 Runnable(on Run queue)
- S 中断 Sleeping
- D 不可中断 Uninterruptible Sleep(usually IO)
- Z 僵死 Zomie(a defunct process)
- T 停止 Traced or stopped
输出列的含义¶
| F | Flag,代表这个程序的标志,4 代表使用者为 root |
| S | Stat,代表这个程序的状态 |
| UID | UserID,程序的拥有者ID |
| PID | ProcessID,程序的ID |
| PPID | ParentPID,程序的父进程的ID |
| C | CPU,CPU的资源使用百分比 |
| PRI | Priority,程序的优先级,值越小优先级越高 |
| NI | Nice,程序的NICE值 |
| ADDR | Address,程序在内存中的地址,- 为正在运行 |
| SZ | Size,程序占用内存的大小 |
| WCHAN | 程序是否正在运行当中,- 为正在运行 |
| TTY | 登入者的终端位置 |
| TIME | 程序使用掉的CPU时间 |
| CMD | Command,程序对应的命令 |
参数¶
a:显示所有进程,包括其他用户的进程-a:显示同一终端下所有程序-A:显示所有进程c:显示进程真实名称-e:等于 -Ae:显示环境变量f:显示程序间关系-H:显示树状结构r:显示当前终端正在执行的程序-
T:显示当前终端所有程序 -
u:以用户为主的格式来显示程序状况 U <用户名>:显示属于该用户的程序的状况-u <uid>:显示属于该用户的程序的状况-U <uid>:等于-u uidg:显示现行终端机下的所有程序,包括群组领导者的程序-g <组名>:显示属于该群组的程序的状况,也可使用群组名称来指定-G <gid>:等于`-g 组名p <pid>:显示该进程的状况-
-p <pid>:等于p pid -
-C:指定执行指令的名称,并列出该指令的程序的状况 -lines <列数>:设置显示画面的列数-widty <每列字符数>:设置显示画面每一列的字符数
优先级¶
Linux 中的进程关于优先级有两个概念:Priority 和 Nice。
Priority 表示进程的动态优先级,俗称:优先级,值越小优先级越高,越早被 CPU 执行。
Nice 表示进程的静态优先级,俗称:NICE值,值越小越优先级越高,分配到的时间片越长。
NICE 值的范围从 -20 到 +19,进程初始的 NICE 值都为 0,可以通过 nice 命令更改,或 renice 命令调整。
Prioirty 和 Nice 并不等价,他们不是一个概念,但是 Nice 值会影响进程的优先级变化。
例如:
两个进程 A 和 B,他们的 Priority 都是 20,他们各自能得到的时间片是 100 ms,
A 的 NICE 值为 15;
B 的 NICE 值为 -15;
则最终他们的优先级分别为:
A = 20 + 15 = 35
B = 20 + (-15) = 5
所以 B 的优先级更高,最后可能会得到的时间片是 300ms,A 可能会得到时间片是 50ms
nohub
wait