ps命令是基础的监控命令,ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息。
参数
- -A 显示所有进程(与-e效果一样)
- -a 显示除控制进程与无端进程外的所有进程
- -N 显示与指定参数不符的所有进程
- -d 显示除控制进程外的所有进程
- -C 显示包含在cmdlist列表中的进程
- -G 显示组ID在grplist列表中的进程
- -U 显示属主的用户ID在uerlist列表中的进程
- -g 显示会话或组ID在grplist列表中的进程
- -p 显示PID在pidlist列表中的进程
- -s 显示会话ID在sesslist列表中的进程
- -t 显示终端ID在ttylist列表中的进程
- -u 显示有效用户ID在userlist列表中的进程
- -F 显示更多额外输出(相对于-f参数而言)
- -O 显示默认输出以外以及format列表指定的特定列
- -M 显示进程的安全信息
- -c 显示进程的额外调度信息
- -f 显示完整格式的输出
- -j 显示任务信息
- -l 显示长列表
- -o 仅显示由format指定的列
- -y 不要显示进程标记
- -Z 显示安全标签信息
- -H 用层级格式来显示信息
- -n 定义WCHAN列显示的值
- -w 采用宽输出模式,不限宽度显示
- -L 显示进程中的线程
- -V 显示ps的版本号
常用组合
- ps aux 列出目前所有的正在内存当中的程序
a:所有与终端相关的进程
u:所有与终端无关的进程
x:以用户为中心组织进程状态信息显示
- ps –ef 显示所有信息,连同命令行
-e:显示所有进程
-f:显示完整格式的进程信息
输出信息解释
Linux:/usr/local/sbin # ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Dec17 ? 00:00:02 init [5]
root 2 0 0 Dec17 ? 00:00:00 [kthreadd]
root 3 2 0 Dec17 ? 00:00:01 [ksoftirqd/0]
root 5 2 0 Dec17 ? 00:00:02 [kworker/u:0]
root 6 2 0 Dec17 ? 00:00:00 [migration/0]
root 7 2 0 Dec17 ? 00:00:00 [watchdog/0]
…
- UID 启动这些进程的用户
- PID 进程ID
- PPID 父进程ID
- C 进程CPU中的利用率
- STIME 进程启动时的系统时间
- TTY 进程启动时的终端设备
- TIME 进行进程需要的累计CPU时间
- CMD 启动的程序名称
如果想要查看更多的输出信息
Linux:/usr/local/sbin # ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 19366 19363 0 80 0 - 6459 wait pts/2 00:00:12 bash
4 R 0 27857 19366 99 80 0 - 1182 - pts/2 00:00:00 ps
- F 内核分配给进程的系统标记
- S 进程的状态(O代表正在运行; S代表在睡眠; R代表可运行 正等待运行;Z代表僵化,进程已结束但父进程不存在;T代表停止)
- PRI 进程的优先级
- NI 谦让度值用来参与决定优先级
- ADDR 进程的内存地址
- SZ 假如进程被换出,所需交换空间的大致大小
- WCHAN 进程休眠的内核函数的地址
实际案例
1.显示所有进程信息
Linux:/usr/local/sbin # ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:02 ksoftirqd/0
5 ? 00:00:02 kworker/u:0
6 ? 00:00:00 migration/0
7 ? 00:00:00 watchdog/0
8 ? 00:00:00 cpuset
9 ? 00:00:00 khelper
…
2.显示指定用户信息
Linux:/usr/local/sbin # ps -u root
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:02 ksoftirqd/0
5 ? 00:00:02 kworker/u:0
6 ? 00:00:00 migration/0
7 ? 00:00:00 watchdog/0
8 ? 00:00:00 cpuset
9 ? 00:00:00 khelper
10 ? 00:00:00 netns
11 ? 00:00:00 sync_supers
12 ? 00:00:00 bdi-default
…
3.查找特定进程
Linux:/usr/local/sbin # ps -ef|grep sshd
root 3611 1 0 Dec17 ? 00:00:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
root 19363 3611 0 Dec17 ? 00:00:03 sshd: root@pts/2
root 28205 19366 99 03:04 pts/2 00:00:00 grep sshd