进程
进程¶
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 uid
g
:显示现行终端机下的所有程序,包括群组领导者的程序-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