Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps的一般参数
ps [a] [-a] [-A] [c] [-N] [-e] [e] [-H] [T] [-f] [-h] [-l] [-w] [-m] [x] [ ] [r] [-t] [-U] [ -C]
ps a:显示所有的进程,包括其他的用户进程
ps -a:所有的终端进程,但不包括session leaders
ps -A:显示所有的进程
ps -e:显示所有的进程,等同于-A
ps e:显示环境变量
ps -s:指定会话相关进程
ps -m:显示线程
ps r:仅显示正在运行的进程
ps T:显示当前终端的所有进程
ps -C:指定命令相关的进程
wxc@wxc-Lenovo-G40-30:~$ ps
PID TTY TIME CMD
11688 pts/2 00:00:00 bash
11827 pts/2 00:00:00 ps
wxc@wxc-Lenovo-G40-30:~$ ps -a
PID TTY TIME CMD
11831 pts/2 00:00:00 ps
wxc@wxc-Lenovo-G40-30:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:01:01 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 watchdog/0
11 ? 00:00:00 watchdog/1
12 ? 00:00:00 migration/1
13 ? 00:00:06 ksoftirqd/1
15 ? 00:00:00 kworker/1:0H
16 ? 00:00:00 kdevtmpfs
wxc@wxc-Lenovo-G40-30:~$ ps e
PID TTY STAT TIME COMMAND
11688 pts/2 Ss 0:00 bash DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-
12568 pts/2 R+ 0:00 ps e XDG_VTNR=7 XDG_SESSION_ID=c2 XDG_GREETER_DATA_DIR
wxc@wxc-Lenovo-G40-30:~$ ps r
PID TTY STAT TIME COMMAND
12570 pts/2 R+ 0:00 ps r
wxc@wxc-Lenovo-G40-30:~$ ps T
PID TTY STAT TIME COMMAND
11688 pts/2 Ss 0:00 bash
12574 pts/2 R+ 0:00 ps T
wxc@wxc-Lenovo-G40-30:~$ ps -t
PID TTY STAT TIME COMMAND
11688 pts/2 Ss 0:00 bash
12575 pts/2 R+ 0:00 ps -t
ps ax:显示所有进程状态和进程的基本信息
wxc@wxc-Lenovo-G40-30:~$ ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /sbin/init splash
2 ? S 0:00 [kthreadd]
3 ? S 0:00 [ksoftirqd/0]
5 ? S< 0:00 [kworker/0:0H]
7 ? S 1:08 [rcu_sched]
8 ? S 0:00 [rcu_bh]
9 ? S 0:00 [migration/0]
10 ? S 0:00 [watchdog/0]
11 ? S 0:00 [watchdog/1]
12 ? S 0:00 [migration/1]
13 ? S 0:06 [ksoftirqd/1]
15 ? S< 0:00 [kworker/1:0H]
16 ? S 0:00 [kdevtmpfs]
17 ? S< 0:00 [netns]
18 ? S< 0:00 [perf]
19 ? S 0:00 [khungtaskd]
20 ? S< 0:00 [writeback]
21 ? SN 0:00 [ksmd]
22 ? SN 0:04 [khugepaged]
显示进程与mysql chrome进程相关的进程号
wxc@wxc-Lenovo-G40-30:~$ ps -C chrome -o pid=
4661
4675
4679
4700
4707
4739
4836
11454
11469
11481
11635
12451
12463
12475
wxc@wxc-Lenovo-G40-30:~$ ps -C mysqld -o pid=
869
kill 4954
wxc@wxc-Lenovo-G40-30:~$ ps -C firefox -o pid=
4954
wxc@wxc-Lenovo-G40-30:~$ kill 4954
wxc@wxc-Lenovo-G40-30:~$ ps -C firefox -o pid=
ps 与grep 常用组合用法,查找特定进程
wxc@wxc-Lenovo-G40-30:~$ ps -ef|grep ssh
wxc 12907 11688 0 15:15 pts/2 00:00:00 grep --color=auto ssh
找出与 cron 与 syslog 这两个服务有关的 PID 号码
wxc@wxc-Lenovo-G40-30:~$ ps aux | egrep '(cron|syslog)'
syslog 717 0.0 0.0 256392 3516 ? Ssl 09:20 0:00 /usr/sbin/rsyslogd -n
root 750 0.0 0.0 30748 3044 ? Ss 09:20 0:00 /usr/sbin/cron -f
wxc 1523 0.0 0.1 437244 11984 ? S<l 09:21 0:15 /usr/bin/pulseaudio --start --log-target=syslog
wxc 12941 0.0 0.0 15988 940 pts/2 S+ 15:18 0:00 grep -E --color=auto (cron|syslog)
把所有的进程显示出来,并输出到001.txt中
wxc@wxc-Lenovo-G40-30:~$ ps -aux>ps001.txt
ps001.txt
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 119880 6064 ? Ss 09:20 0:02 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 09:20 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:20 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 09:20 0:00 [kworker/0:0H]
root 7 0.3 0.0 0 0 ? S 09:20 1:12 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 09:20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 09:20 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S 09:20 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 09:20 0:00 [watchdog/1]
root 12 0.0 0.0 0 0 ? S 09:20 0:00 [migration/1]
root 13 0.0 0.0 0 0 ? S 09:20 0:06 [ksoftirqd/1]
root 15 0.0 0.0 0 0 ? S< 09:20 0:00 [kworker/1:0H]
root 16 0.0 0.0 0 0 ? S 09:20 0:00 [kdevtmpfs]
root 17 0.0 0.0 0 0 ? S< 09:20 0:00 [netns]
root 18 0.0 0.0 0 0 ? S< 09:20 0:00 [perf]
root 19 0.0 0.0 0 0 ? S 09:20 0:00 [khungtaskd]
root 20 0.0 0.0 0 0 ? S< 09:20 0:00 [writeback]
root 21 0.0 0.0 0 0 ? SN 09:20 0:00 [ksmd]
root 22 0.0 0.0 0 0 ? SN 09:20 0:04 [khugepaged]
root 23 0.0 0.0 0 0 ? S< 09:20 0:00 [crypto]
root 24 0.0 0.0 0 0 ? S< 09:20 0:00 [kintegrityd]
PID:进程ID
TTY:终端名称
TIME:进程所用的CPU时间总数,从启动开始
CMD:启动任务的命令行(包括参数)
STAT参数:
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)