Skip to content

进程

进程

Linux 中 ps 命令是 Process Status 的缩写,用来列出系统中当前运行的那些进程。

ps 列出的是执行 ps 命令那一时刻那些进程的快照,是静态的。

想要动态显示可以使用 top 或 htop 命令。

Linux 中的进程有 5 种状态:

  1. 运行(正在运行或在运行队列中等待)
  2. 中断(休眠中,受阻,在等待某个条件的形成或接收到信号)
  3. 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
  4. 僵死(进程已终止,但进程描述符存在,直到父进程调用 wait4() 系统调用后释放)
  5. 停止(进程收到SIGSTOPSIGTSTPSIGTTINSIGTTOU信号后停止运行)

对应到 ps 中 5 种状态码:

  1. R 运行 Runnable(on Run queue)
  2. S 中断 Sleeping
  3. D 不可中断 Uninterruptible Sleep(usually IO)
  4. Z 僵死 Zomie(a defunct process)
  5. 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:等于 -A
  • e:显示环境变量
  • 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 中的进程关于优先级有两个概念:PriorityNice

Priority 表示进程的动态优先级,俗称:优先级,值越小优先级越高,越早被 CPU 执行。

Nice 表示进程的静态优先级,俗称:NICE值,值越小越优先级越高,分配到的时间片越长。

NICE 值的范围从 -20 到 +19,进程初始的 NICE 值都为 0,可以通过 nice 命令更改,或 renice 命令调整。

1
2
3
4
5
# 设置优先值并执行
nice [-n <nice值>] [执行命令]

# 调整优先值
renice [nice值] [-u 用户名或uid] [-g 组名或gid] [-p PID]

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