更多的 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
: 进程的进程 IDPPID
: 父进程的进程号(如果该进程是由另一个进程启动的)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
命令输出的第一部分显示的是系统的概况.
- 第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。平均负载有3个值: 最近1分钟的、最近5分钟的和最近15分钟的平均负载。值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。
- 第二行显示了进程概要信息——
top
命令的输出中将进程叫作任务(task):有多少进程处在 运行(running)、休眠(sleeping)、停止(sopped)或是僵化(zombie)状态(僵化状态是指进程完成了,但父进程没有响应): - 第三行显示了CPU的概要信息。
top
根据进程的属主(用户还是系统)和进程的状态(运行、 空闲还是等待)将CPU利用率分成几类输出 - 紧跟其后的两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存, 当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配 了的话)的状态而言的。
最后一部分显示了当前运行中的进程的详细列表,有些列跟ps
命令的输出类似。
PID
: 进程的ID。USER
: 进程属主的名字。PR
: 进程的优先级。NI
: 进程的谦让度值。VIRT
: 进程占用的虚拟内存总量。RES
: 进程占用的物理内存总量。SHR
: 进程和其他进程共享的内存总量。S
: 进程的状态(D
代表可中断的休眠状态,R
代表在运行状态,S
代表休眠状态,T
代表跟踪状态或停止状态,Z
代表僵化状态)。%CPU
: 进程使用的CPU时间比例。%MEM
: 进程使用的内存占可用内存的比例。TIME+
: 自进程启动到目前为止的CPU时间总量。COMMAND
: 进程所对应的命令行名称,也就是启动的程序名