ps命令实例讲解

本文详细解析ps命令的各种用法,包括进程检索、输出格式控制、线程信息展示、进程状态与资源使用情况等,通过实例演示如何高效地管理与分析Linux进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

检索进程:ps
  ps这个命令最常见的,我们经常用它来检索进程,但在我认真阅读过ps的man文档之前,我使用的最多的选项是aux,用grep匹配出特定的进程,然后再处理它,现在看来这种做法非常笨拙,呵呵!其实我们完全可以用pgrep快速的完成这一串操作。

  今天暂不讲解pgrep的用法,先让我们更多的了解一下ps,首先ps支持三种选项格式:unix options这种选项通常需要在其前加横杠-,多值可梱绑;BSD options 选项前不用加任何符号;GNU Long options即GNU长选项,选项前加两个横杠;这三种选项可以混用,在产生冲突时程序会提示。

  ps选项分类:检索类、输出列格式控制、线程信息、其他信息,在此我只列举一些常用到的用法,其他选项在用到时可以查看手册页。


ps命令列出各列含义详解

pid %d
进程标识.
comm %s
可执行文件的文件名, 包括路径. 该文件是否可见取决于该文件是否已被交换出内存.
state %c
";RSDZT"; 中的一个, R 是正在运行, S 是在可中断的就绪态中睡眠, D 是在不可中断的等待或交换态中睡眠, Z 是僵死, T 是被跟踪或被停止(由于收到信号).
ppid %d
父进程 PID.
pgrp %d
进程的进程组 ID.
session %d
进程的会话 ID.
tty %d
进程所使用终端.
tpgid %d
当前拥有该进程所连接终端的进程所在的进程组 ID.
flags %u
进程标志. 目前每个标志都设了数学位, 所以输出里就不包括该位. crt0.s 检查数学仿真这可能是一个臭虫, 因为不是每个进程都是用 c 编译的程序. 数学位应该是十进制的 4, 而跟踪位应该是十进制的 10.
minflt %u
进程所导致的小错误(minor faults)数目, 这样的小错误(minor faults)不需要从磁盘重新载入一个内存页.
cminflt %u
进程及其子进程所导致的小错误(minor faults)数目.
majflt %u
进程所导致的大错误(major faults)数目, 这样的大错误(major faults)需要重新载入内存页.
cmajflt %u
进程及其子进程所导致的大错误(major faults)数目.
utime %d
进程被调度进用户态的时间(以 jiffy 为单位, 1 jiffy=1/100 秒,另外不同硬件体系略有不同).
stime %d
进程被调度进内核态的时间, 以 jiffy 为单位.
cutime %d
进程及其子进程被调度进用户态的时间, 以 jiffy 为单位.
cstime %d
进程及其子进程被调度进内核态的时间, 以 jiffy 为单位.
counter %d
如果进程不是当前正在运行的进程, 就是进程在下个时间片当前可以拥有的最大时间, 以 jiffy 为单位. 如果进程是当前正在运行的进程, 就是当前时间片中所剩下 jiffy 数目.
priority %d
标准优先数只再加上 15, 在内核里该值总是正的.
timeout %u
当前至进程的下一次间歇时间, 以 jiffy 为单位.
itrealvalue %u
由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.
starttime %d
进程自系统启动以来的开始时间, 以 jiffy 为单位.
vsize %u
虚拟内存大小.
rss %u
Resident Set Size(驻留大小): 进程所占用的真实内存大小, 以页为单位, 为便于管理而减去了 3. rss 只包括正文, 数据以及堆栈的空间, 但不包括尚未要求装入内存的或已被交换出去的.
rlim %u
当前进程的 rss 限制, 以字节为单位, 通常为 2,147,483,647.
startcode %u
正文部分地址下限.
endcode %u
正文部分地址上限.
startstack %u
堆栈开始地址.
kstkesp %u
esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.
kstkeip %u
EIP(32 位指令指针)的当前值.
signal %d
待处理信号的 bitmap(通常为 0).
blocked %d
被阻塞信号的 bitmap(对 shell 通常是 0, 2).
sigignore %d
被忽略信号的 bitmap.
sigcatch %d
被俘获信号的 bitmap.
wchan %u
进程在其中等待的通道, 实际是一个系统调用的地址. 如果你需要文本格式的, 也可以在名字列表中找到. (如果有最新版本的 /etc/psdatabase, 你可以在ps -l 的结果中的 WCHAN 域看到)
cpuinfo
保存了CPU 以及体系架构依赖条目的列表. 对于不同的系统架构有不同的列表, 共有的两项是 cpuBogoMIPS, cpu 可能是当前在用的 CPU, 而 BogoMIPS 则是内核初始化时计算出的一个系统常数.
devices
主设备号及设备组的列表, 文本格式. MAKEDEV 脚本使用该文件来维持内核的一致性.
dma
一个列表, 指出正在使用的ISA DMA (直接内存访问)通道.
filesystems
以文本格式列出了被编译进内核的文件系统. 当没有给


  -e用于显示所有进程,以下是输出的一小部分:

[ root@supersun.biz ~]#ps -e
   PID TTY       TIME CMD
1 ?        00:00:00 init
2 ?        00:00:00 migration/0
3 ?        00:00:00 ksoftirqd/0
4 ?        00:00:00 watchdog/0
5 ?        00:00:00 events/0

  域定义:

PID 进程ID
TTY 与进程关联的终端
TIME 进程使用CPU累计时间
CMD 执行文件的名称


-f选项定义为full-format listing

[ root@supersun.biz ~]#ps -ef
UID        PID   PPID   C STIME TTY       TIME CMD
root       1     0   0 08:31 ?        00:00:00 init [5]                            
root       2     1   0 08:31 ?        00:00:00 [migration/0]
root       3     1   0 08:31 ?        00:00:00 [ksoftirqd/0]
root       4     1   0 08:31 ?        00:00:00 [watchdog/0]

域定义:

UID 用户ID
C        CPU利用率,以整数表示。
STIME 进程的启动时间

  -F选项添加了进程使用内存方面的一些信息:

[root@supersun ~]# ps -eF
UID        PID   PPID   C SZ RSS PSR STIME TTY       TIME CMD
root       1     0   0 508 684 1 Nov29 ?        00:00:00 init [5]                
root       2     1   0     0     0 0 Nov29 ?        00:00:00 [migration/0]
root       3     1   0     0     0 0 Nov29 ?        00:00:00 [ksoftirqd/0]
root       4     1   0     0     0 0 Nov29 ?        00:00:00 [watchdog/0]
root       5     1   0     0     0 1 Nov29 ?        00:00:00 [migration/1]
root       6     1   0     0     0 1 Nov29 ?        00:00:00 [ksoftirqd/1]
root       7     1   0     0     0 1 Nov29 ?        00:00:00 [watchdog/1]


SZ        进程用到的swap的量,这是一个粗略计算;
RSS 驻留内存大小
PSR 进程使用的处理器,在多处理器上可以体现出来,如下面的两个进程使用的不同的处理器(超线程的也算):

UID        PID   PPID   C SZ RSS PSR STIME TTY       TIME CMD
root       1     0   0 508 684 1 Nov29 ?        00:00:00 init [5]                
root       2     1   0     0     0 0 Nov29 ?        00:00:00 [migration/0]

  -L用于显示线程

[ root@supersun.biz ~]#ps -eLf
UID        PID   PPID LWP   C NLWP STIME TTY       TIME CMD
root       1     0     1   0 1 08:31 ?        00:00:00 init [5]                  
root       2     1     2   0 1 08:31 ?        00:00:00 [migration/0]
root    2233   2228   2233   3 8 08:35 ?        00:04:50 /root/firefox/firefox-bin
root    2233   2228   2271   0 8 08:36 ?        00:00:00 /root/firefox/firefox-bin
root    2233   2228   2272   0 8 08:36 ?        00:00:01 /root/firefox/firefox-bin
root    2233   2228   2277   0 8 08:36 ?        00:00:00 /root/firefox/firefox-bin
root    2233   2228   2278   0 8 08:36 ?        00:00:00 /root/firefox/firefox-bin
root    2233   2228   2279   0 8 08:36 ?        00:00:00 /root/firefox/firefox-bin

LWP light weight process ID 可以称其为线程ID。
NLWP 进程中的线程数number of lwps (threads) in the process。

  显示进程树

[ root@supersun.biz ~]#ps -ejH
   PID   PGID SID TTY       TIME CMD
1     1     1 ?        00:00:00 init
2     1     1 ?        00:00:00 migration/0
3     1     1 ?        00:00:00 ksoftirqd/0
4     1     1 ?        00:00:00 watchdog/0
5     1     1 ?        00:00:00 events/0
6     1     1 ?        00:00:00 khelper
7     1     1 ?        00:00:00 kthread
10     1     1 ?        00:00:00     kblockd/0
11     1     1 ?        00:00:00     kacpid
86     1     1 ?        00:00:00     cqueue/0
89     1     1 ?        00:00:00     khubd

SID 即session ID
F即flag,其值有:
1 forked but didn't exec
4 used super-user privileges

S即STAT,其值有:
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
对于BSD选项产生的值:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group

  当然我们还可以定义ps的输出域,如:

[root@supersun ~]# ps -e -o pid
   PID
1
2
3

  也可以指定多个域:

[ root@supersun.biz ~]#ps -e -o pid,cmd
   PID CMD
1 init [5]                            
2 [migration/0]
3 [ksoftirqd/0]
4 [watchdog/0]
5 [events/0]
6 [khelper]

  需要注意的是在提定域输出的时使就不要使用-f等定义域输出的选项,这样会有冲突。

  使用进程名对进程进行检索:

[ root@supersun.biz ~]#ps -C syslogd -F
UID        PID   PPID   C SZ RSS PSR STIME TTY       TIME CMD
root    1479     1   0 424 632 0 08:32 ?        00:00:00 syslogd -m 0

  对输出进行排序:

[ root@supersun.biz ~]#ps -e -o pid,rss,pcpu,cmd --sort pcpu,rss
   PID RSS %CPU CMD
2     0   0.0 [migration/0]
3     0   0.0 [ksoftirqd/0]
4     0   0.0 [watchdog/0]
2507 35948   0.2 stardict
2206   2276   2.0 gnome-screensaver
2170 15248   2.2 /usr/libexec/wnck-applet --oaf-activate-iid=OAFIID:GNOME_Wncklet_Factory
2064   8328   2.4 /usr/libexec/gnome-settings-daemon
2084 10860   2.5 metacity --sm-client-id=default1
6434   3284   2.6 rdesktop -T192.168.1.177 - Terminal Server Client -usunchao -rsound ff -
2213 22428   3.1 gnome-terminal
2233 104276 4.3 /root/firefox/firefox-bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值