Head标头
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先 级进程 低优先序的进程
L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
\+ 位于后台的进程组
START 进程启动时间和日期
TIME 执行的时间
COMMAND 正在执行的命令行命令
NI 优先级(Nice)
PRI 进程优先级编号(Priority)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
参数
注意: 参数的大小写, 以及是否带 “-” 所代表的意思不同
-A 显示所有进程 (等价于-e)
# ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
-u 指定查看某个用户进程
# ps -u root //显示root进程用户信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
-e 此参数的效果和指定"A"参数相同
-f:显示UID PID PPID C STIME TTY TIME CMD 等信息
# ps -ef //显示所有命令,连带命令行
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:02 /sbin/init
root 2 0 0 10:22 ? 00:00:00 [kthreadd]
root 3 2 0 10:22 ? 00:00:00 [migration/0]
root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
root 6 2 0 10:22 ? /usr/lib/NetworkManager
a:显示当前终端下所有的进程,包括其他用户的进程信息
u:以用户为主的格式显示进程情况 用户名和启动时间的顺序来显示进程;
x:显示所有进程
e:列出进程信息时,添加每个进程所在的环境变量
f:以ASCII码字符显示进程间的关系
root:# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
smmsp 3521 0.0 0.7 6556 1616 ? Ss 20:40 0:00 sendmail: Queue runner@01:00:00 f
root 3532 0.0 0.2 2428 452 ? Ss 20:40 0:00 gpm -m /dev/input/mice -t imps2
htt 3563 0.0 0.0 2956 196 ? Ss 20:41 0:00 /usr/sbin/htt -retryonerror 0
htt 3564 0.0 1.7 29460 3704 ? Sl 20:41 0:00 htt_server -nodaemon
root 3574 0.0 0.4 5236 992 ? Ss 20:41 0:00 crond
xfs 3617 0.0 1.3 13572 2804 ? Ss 20:41 0:00 xfs -droppriv -daemon
root 3627 0.0 0.2 3448 552 ? SNs 20:41 0:00 anacron -s
root 3636 0.0 0.1 2304 420 ? Ss 20:41 0:00 /usr/sbin/atd
dbus 3655 0.0 0.5 13840 1084 ? Ssl 20:41 0:00 dbus-daemon-1 --system
“-L”选项将显示进程的线程。它可以用来显示特定进程的所有线程或者所有进程。
ps -p 3150 -L
ps -L 3150
pstree -p 主线程id
-o 用户自定义格式。
-m 显示所有的线程
-C 后面跟你要找的进程的名字。
-L 如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。
ps -C getty // 示例名为getty的进程的信息。
ps -o pid,ppid,pgrp,session,tpgid,comm 输出指定的字段
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
ps -e -o pid,comm,etime 显示进程运行的时间
killall 进程名
pkill 进程名
使用 PS 实时监控进程状态
ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。
通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’
如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’
这里的动态查看并不像top或者htop命令一样。但是使用ps的好处,是你能够定义显示的字段,你能够选择你想查看的字段。
举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:
$ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’
/proc/进程号/介绍
在 /proc 目录里, 每个正在运行的进程都有一个以该进程 ID 命名的子目录
/proc 是一个伪文件系统, 被用作内核数据结构的接口, /proc 里的大多数文件都是只读的,
产看此进程打开了几个文件IO
cd /proc/进程号/fd
ls -l
按cpu使用率排序
ps aux --sort=-pcpu
按内存使用率排序
ps aux --sort -rss