Skip to main content

更多的 bash shell 命令

本章内容包括:

  • 进程命令 ps 的参数和使用介绍

管理进程

默认情况下, ps命令只会显示运行在当前控制台下的属于当前用户的进程.

ps命令曾经有两个版本, 每个版本都有自己的命令行参数集, 这些参数控制着输出什么信息以及如何显示. 最近 Linux 开发人员已经将这两种ps命令格式合并到了单个ps命令中.

Linux 系统中使用的 GNU ps命令支持 3 种不同类型的命令行参数:

  • Unix 风格的参数,前面加单破折线
  • BSD 风格的参数,前面不加破折线
  • GNU 风格的长参数,前面加双破折线。

Unix 风格的参数

Unix 风格的参数是从贝尔实验室开发的 AT&T Unix 系统上原有的 ps 命令继承下来的:

参数描述
-A显示所有进程
-N显示与指定参数不符的所有进程
-a显示除控制进程(session leader)和无终端进程外的所有进程
-d显示除控制进程外的所有进程
-e显示所有进程
-C cmdlist显示包含在cmdlist列表中的进程
-G grplist显示组 ID 在grplist列表中的进程
-U userlist显示属主的用户 ID 在userlist列表中的进程
-g grplist显示会话或组 ID 在grplist列表中的进程
-p pidlist显示 PID 在pidlist列表中的进程
-s sesslist显示会话 ID 在sesslist列表中的进程
-t ttylist显示终端 ID 在ttylist列表中的进程
-u userlist显示有效用户 ID 在userlist列表中的进程
-F显示更多额外输出(相对-f参数而言)
-O format显示默认的输出列以及format列表指定的特定列
-M显示进程的安全信息
-c显示进程的额外调度器信息
-f显示完整格式的输出
-j显示任务信息
-l显示长列表
-o format仅显示由 format 指定的列
-y不要显示进程标记(process flag,表明进程状态的标记)
-Z显示安全标签(security context)3 信息
-H用层级格式来显示进程(树状,用来显示父进程)
-n namelist定义了 WCHAN 列显示的值
-w采用宽输出模式,不限宽度显示
-L显示进程中的线程
-V显示 ps 命令的版本号

示例

# 显示所有进程, 不限制宽度
ps -efw

# 仅显示指定列信息
ps -ew -o pid,ppid,time,command

显示列的备注:

> ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:02 ? 00:00:04 /sbin/init splash
root 2 0 0 08:02 ? 00:00:00 [kthreadd]
  • UID: 启动这些进程的用户
  • PID: 进程的进程 ID
  • PPID: 父进程的进程号(如果该进程是由另一个进程启动的)
  • C: 进程生命周期中的 CPU 利用率
  • STIME: 进程启动时的系统时间
  • TTY: 进程启动时的终端设备
  • TIME: 运行进程需要的累计 CPU 时间
  • CMD: 启动的程序名称

BSD 风格的参数

参数描述
T显示跟当前终端关联的所有进程
a显示跟任意终端关联的所有进程
g显示所有的进程,包括控制进程
r仅显示运行中的进程
x显示所有的进程,甚至包括未分配任何终端的进程
U userlist显示归 userlist 列表中某用户 ID 所有的进程
p pidlist显示 PID 在 pidlist 列表中的进程
t ttylist显示所关联的终端在 ttylist 列表中的进程
O format除了默认输出的列之外,还输出由 format 指定的列
X按过去的 Linux i386 寄存器格式显示
Z将安全信息添加到输出中
j显示任务信息
l采用长模式
o format仅显示由 format 指定的列
s采用信号格式显示
u采用基于用户的格式显示
v采用虚拟内存格式显示
N namelist定义在 WCHAN 列中使用的值
O order定义显示信息列的顺序
S将数值信息从子进程加到父进程上,比如 CPU 和内存的使用情况
c显示真实的命令名称(用以启动进程的程序名称)
e显示命令使用的环境变量
f用分层格式来显示进程,表明哪些进程启动了哪些进程
h不显示头信息
k sort指定用以将输出排序的列
n和 WCHAN 信息一起显示出来,用数值来表示用户 ID 和组 ID
w为较宽屏幕显示宽输出
H将线程按进程来显示
m在进程后显示线程
L列出所有格式指定符
V显示 ps 命令的版本号

GNU 长参数

GNU 开发人员在这个新改进过的 ps 命令中加入了另外一些参数。其中一些 GNU 长参数复制了现有的 Unix 或 BSD 类型的参数,而另一些则提供了新功能

参数描述
--Group grplist显示组 ID 在 grplist 列表中的进程
--User userlist显示用户 ID 在 userlist 列表中的进程
--group grplist显示有效组 ID 在 grplist 列表中的进程
--pid pidlist显示 PID 在 pidlist 列表中的进程
--ppid pidlist显示父 PID 在 pidlist 列表中的进程
--sid sidlist显示会话 ID 在 sidlist 列表中的进程
--tty ttylist显示终端设备号在 ttylist 列表中的进程
--user userlist显示有效用户 ID 在 userlist 列表中的进程
--format format仅显示由 format 指定的列
--context显示额外的安全信息
--cols n将屏幕宽度设置为 n 列
--columns n将屏幕宽度设置为 n 列
--cumulative包含已停止的子进程的信息
--forest用层级结构显示出进程和父进程之间的关系
--headers在每页输出中都显示列的头
--no-headers不显示列的头
--lines n将屏幕高度设为 n 行
--rows n将屏幕高度设为 n 排
--sort order指定将输出按哪列排序
--width n将屏幕宽度设为 n 列
--help显示帮助信息
--info显示调试信息
--version显示 ps 命令的版本号

示例

# 按照层级显示进程
ps -ef --forest

# 设置屏幕宽度
ps -ef --width 50

# 按照时间倒序, 父进程ID正序排列
ps -ef --sort -time,+pid

4.1.2 实时监测进程

top命令输出的第一部分显示的是系统的概况.

  1. 第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。平均负载有3个值: 最近1分钟的、最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。
  2. 第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在 运行(running)、休眠(sleeping)、停止(sopped)或是僵化(zombie)状态(僵化状态是指进程完成了,但父进程没有响应):
  3. 第三行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、 空闲还是等待)将CPU利用率分成几类输出
  4. 紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存, 当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配 了的话)的状态而言的。

最后一部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似。

  • PID: 进程的ID。
  • USER: 进程属主的名字。
  • PR: 进程的优先级。
  • NI: 进程的谦让度值。
  • VIRT: 进程占用的虚拟内存总量。
  • RES: 进程占用的物理内存总量。
  • SHR: 进程和其他进程共享的内存总量。
  • S: 进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)。
  • %CPU: 进程使用的CPU时间比例。
  • %MEM: 进程使用的内存占可用内存的比例。
  • TIME+: 自进程启动到目前为止的CPU时间总量。
  • COMMAND: 进程所对应的命令行名称,也就是启动的程序名

top