Linux之ps命令查看进程
简介
ps
是LINUX
下使用频率很高的一个命令,它来自于英文词组process status
的缩写,其功能是用于显示当前系统的进程状态。使用ps
命令可以查看到进程的所有信息,例如进程号、发起者、系统资源使用占比(处理器与内存)、运行状态等。帮助我们及时的发现哪些进程出现僵死
或不可中断
等异常情况。
语法格式:
1 | ps [参数] |
常用参数:
参数 | 功能解释 |
---|---|
a | 显示现行终端机下的所有程序,包括其他用户的程序 |
u | 显示进程的归属用户及内存的使用情况 |
x | 显示没有控制终端的进程 |
-A | 显示所有程序 |
-l | 长格式显示,显示更加详细的信息 |
-e | 显示所有进程,和-A作用一致 |
c | 显示每个程序真正的指令名称,而不包含路径 |
-C <指令名称> | 指定执行指令的名称,并列出该指令的程序的状况 |
-d | 显示所有程序,但不包括阶段作业管理员的程序 |
-f | 显示UID,PPIP,C与STIME栏位 |
f | 用ASCII字符显示树状结构,表达程序间的相互关系 |
-j | 采用工作控制的格式显示程序状况 |
-l | 采用详细的格式来显示程序状况 |
L | 列出栏位的相关信息 |
n | 以数字来表示USER和WCHAN栏位 |
-N | 显示所有的程序,除了执行ps指令终端机下的程序之外 |
r | 只列出现行终端机正在执行中的程序 |
-w或w | 采用宽阔的格式来显示程序状况 |
语法格式:
查看系统中所有进程,使用BSD操作系统格式。选项可以组合在一起,但是选项前不能有
-
连字符。1ps aux查看系统中所有进程,使用LINUX标准命令格式。选项可以组合在一起,并且选项前必须有
-
连字符。1ps -le
1.不加参数的ps命令
这是一个基本的 ps
使用。在控制台中执行这个命令并查看结果。
1 2 3 4 5 6 7 | [root@MYDB01 ~]# ps PID TTY TIME CMD 3266 pts/3 00:00:00 bash 3307 pts/3 00:00:00 yum 3593 pts/3 00:00:00 more 4417 pts/3 00:00:00 ps [root@MYDB01 ~]# |
不加选项执行ps
命令,结果默认会显示4列信息。这些信息在显示时未排序。
2.显示所有当前进程
使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@MYDB01 ~]# ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 86:39 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 2 ? S 0:06 [kthreadd] 4 ? S< 0:00 [kworker/0:0H] 6 ? S 0:11 [ksoftirqd/0] 7 ? S 0:22 [migration/0] 8 ? S 0:00 [rcu_bh] 9 ? S 14:39 [rcu_sched] 10 ? S< 0:00 [lru-add-drain] 11 ? S 2:23 [watchdog/0] 12 ? S 1:58 [watchdog/1] 13 ? S 0:23 [migration/1] 14 ? S 0:12 [ksoftirqd/1] 16 ? S< 0:00 [kworker/1:0H] 17 ? S 2:03 [watchdog/2] 18 ? S 0:23 [migration/2] 19 ? S 0:40 [ksoftirqd/2] 21 ? S< 0:00 [kworker/2:0H] 22 ? S 1:46 [watchdog/3] 23 ? S 0:23 [migration/3] 24 ? S 0:10 [ksoftirqd/3] 26 ? S< 0:00 [kworker/3:0H] …… |
由于比较多的输出,可以管道和less
分屏显示:
1 | [root@MYDB01 ~]# ps -ax | less |
3.根据用户过滤进程
在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户moonrong
的进程,可以这样操作:
1 2 3 4 5 | [root@MYDB01 ~]# ps -u moonrong PID TTY TIME CMD 4617 pts/2 00:00:00 bash 4659 pts/2 00:00:00 vim [root@MYDB01 ~]# |
4.通过cpu和内存使用来过滤进程
当我们希望把结果按照CPU
或者内存用量来筛选,这样就找到哪个进程占用了资源。
要做到这一点,我们可以使用 aux 参数,来显示全面的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [root@MYDB01 ~]# ps -aux | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 194060 6316 ? Ss 3月04 86:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 3月04 0:06 [kthreadd] root 4 0.0 0.0 0 0 ? S< 3月04 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 3月04 0:11 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 3月04 0:22 [migration/0] root 8 0.0 0.0 0 0 ? S 3月04 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 3月04 14:39 [rcu_sched] root 10 0.0 0.0 0 0 ? S< 3月04 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S 3月04 2:23 [watchdog/0] root 12 0.0 0.0 0 0 ? S 3月04 1:58 [watchdog/1] root 13 0.0 0.0 0 0 ? S 3月04 0:23 [migration/1] root 14 0.0 0.0 0 0 ? S 3月04 0:12 [ksoftirqd/1] root 16 0.0 0.0 0 0 ? S< 3月04 0:00 [kworker/1:0H] root 17 0.0 0.0 0 0 ? S 3月04 2:03 [watchdog/2] root 18 0.0 0.0 0 0 ? S 3月04 0:23 [migration/2] root 19 0.0 0.0 0 0 ? S 3月04 0:40 [ksoftirqd/2] root 21 0.0 0.0 0 0 ? S< 3月04 0:00 [kworker/2:0H] root 22 0.0 0.0 0 0 ? S 3月04 1:46 [watchdog/3] root 23 0.0 0.0 0 0 ? S 3月04 0:23 [migration/3] root 24 0.0 0.0 0 0 ? S 3月04 0:10 [ksoftirqd/3] |
上面默认的结果集是未排好序的,可以通过 --sort
命令来排序。
1)根据 CPU 使用来升序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@MYDB01 ~]# ps -aux --sort -pcpu | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND gdm 1941 1.3 1.9 774268 74484 ? Sl 3月04 3867:31 /usr/libexec/gsd-color avahi 730 0.1 0.0 62292 2200 ? Ss 3月04 416:17 avahi-daemon: registering [mynfs01-573761.local] mysql 30566 0.1 4.5 1405984 178296 ? Sl 9月14 9:29 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql -- root 1 0.0 0.1 194060 6316 ? Ss 3月04 86:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 3月04 0:06 [kthreadd] root 4 0.0 0.0 0 0 ? S< 3月04 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 3月04 0:11 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 3月04 0:22 [migration/0] root 8 0.0 0.0 0 0 ? S 3月04 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 3月04 14:39 [rcu_sched] root 10 0.0 0.0 0 0 ? S< 3月04 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S 3月04 2:23 [watchdog/0] root 12 0.0 0.0 0 0 ? S 3月04 1:58 [watchdog/1] root 13 0.0 0.0 0 0 ? S 3月04 0:23 [migration/1] …… |
2)根据 内存使用 来升序排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@MYDB01 ~]# ps -aux --sort -pmem | less USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 30566 0.1 4.5 1405984 178296 ? Sl 9月14 9:29 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql -- gdm 1773 0.0 3.3 3493108 129708 ? Sl 3月04 258:24 /usr/bin/gnome-shell gdm 1941 1.3 1.9 774268 74484 ? Sl 3月04 3867:34 /usr/libexec/gsd-color root 3307 0.0 0.6 354744 25644 pts/3 T 13:35 0:00 /usr/bin/python /usr/bin/yum install cmatrix root 1619 0.0 0.6 317196 25100 tty1 Ssl+ 3月04 17:11 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-cTGHUP/database -seat seat0 -nolisten tcp vt1 polkitd 732 0.0 0.5 620244 20436 ? Ssl 3月04 110:20 /usr/lib/polkit-1/polkitd --no-debug gdm 1968 0.0 0.4 1012400 17512 ? Sl 3月04 3:45 /usr/libexec/gsd-media-keys root 1185 0.0 0.4 574308 17292 ? Ssl 3月04 62:47 /usr/bin/python2 -Es /usr/sbin/tuned -l -P root 1191 0.0 0.4 1011392 16796 ? Ssl 3月04 0:00 /usr/sbin/libvirtd gdm 1834 0.0 0.4 465112 15532 ? Sl 3月04 0:00 /usr/libexec/ibus-x11 --kill-daemon gdm 1933 0.0 0.3 615520 14760 ? Sl 3月04 0:00 /usr/libexec/gsd-xsettings gdm 1975 0.0 0.3 632056 14412 ? Sl 3月04 4:24 /usr/libexec/gsd-power gdm 2014 0.0 0.3 549604 14076 ? Sl 3月04 0:00 /usr/libexec/gsd-wacom …… |
3)根据CPU和内存升序排序
我们也可以将它们合并到一个命令,并通过管道显示前5个结果:
1 2 3 4 5 6 7 | [root@MYDB01 ~]# ps -aux --sort -pcpu,+pmem | head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND gdm 1941 1.3 1.9 774268 74484 ? Sl 3月04 3867:38 /usr/libexec/gsd-color avahi 730 0.1 0.0 62292 2200 ? Ss 3月04 416:18 avahi-daemon: registering [mynfs01-573770.local] mysql 30566 0.1 4.5 1405984 178296 ? Sl 9月14 9:29 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/usr/local/mysql/logs/mysqld.pid --socket=/tmp/mysql.sock root 2 0.0 0.0 0 0 ? S 3月04 0:06 [kthreadd] [root@MYDB01 ~]# |
5.通过进程名和PID过滤
使用 -C 参数,后面跟要找的进程的名字。比如想显示一个名为mysqld
的进程的信息,就可以使用下面的命令:
1 2 3 | [root@MYDB01 ~]# ps -C mysqld PID TTY TIME CMD 30566 ? 00:09:29 mysqld |
如果想要看到更多的细节,我们可以使用-f
参数来查看格式化的信息列表:
1 2 3 4 | [root@MYDB01 ~]# ps -f -C mysqld UID PID PPID C STIME TTY TIME CMD mysql 30566 30318 0 9月14 ? 00:09:29 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log [root@MYDB01 ~]# |
6.根据线程来过滤进程
如果想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@MYDB01 ~]# ps -L 30566 PID LWP TTY STAT TIME COMMAND 30566 30566 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30567 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30568 ? Sl 0:32 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30569 ? Sl 0:32 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30570 ? Sl 0:33 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30571 ? Sl 0:33 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30572 ? Sl 0:32 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30573 ? Sl 0:33 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30574 ? Sl 0:36 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30575 ? Sl 0:30 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30576 ? Sl 0:36 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30577 ? Sl 0:31 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30578 ? Sl 0:43 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30582 ? Sl 0:36 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30583 ? Sl 1:06 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30584 ? Sl 0:07 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30585 ? Sl 0:58 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30586 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30587 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30588 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30589 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30590 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30591 ? Sl 0:04 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30592 ? Sl 0:07 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30593 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30594 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30595 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 30804 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 31009 ? Sl 0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 31539 ? Sl 0:06 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad 30566 31540 ? Sl 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mariadb/mariad [root@MYDB01 ~]# |
7.树形显示进程
除了用pstree
外,有时候我们可以使用-axjf
参数以树形结构显示进程。
1 2 3 4 5 6 7 8 9 10 11 12 | [root@MYDB01 ~]# ps -axjf PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 2 0 0 ? -1 S 0 0:06 [kthreadd] 2 4 0 0 ? -1 S< 0 0:00 \_ [kworker/0:0H] 2 6 0 0 ? -1 S 0 0:11 \_ [ksoftirqd/0] 2 7 0 0 ? -1 S 0 0:22 \_ [migration/0] 2 8 0 0 ? -1 S 0 0:00 \_ [rcu_bh] 2 9 0 0 ? -1 S 0 14:39 \_ [rcu_sched] 2 10 0 0 ? -1 S< 0 0:00 \_ [lru-add-drain] 2 11 0 0 ? -1 S 0 2:23 \_ [watchdog/0] 2 12 0 0 ? -1 S 0 1:58 \_ [watchdog/1] …… |
8.显示安全信息
如果想要查看现在有谁登入了服务器。可以使用ps
命令加上相关参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | [root@MYDB01 ~]# ps -eo pid,user,args PID USER COMMAND 1 root /usr/lib/systemd/systemd --switched-root --system --deserialize 22 2 root [kthreadd] 4 root [kworker/0:0H] 6 root [ksoftirqd/0] 7 root [migration/0] 8 root [rcu_bh] 9 root [rcu_sched] 10 root [lru-add-drain] 11 root [watchdog/0] 12 root [watchdog/1] 13 root [migration/1] 14 root [ksoftirqd/1] 16 root [kworker/1:0H] 17 root [watchdog/2] 18 root [migration/2] 19 root [ksoftirqd/2] 21 root [kworker/2:0H] 22 root [watchdog/3] 23 root [migration/3] 24 root [ksoftirqd/3] 26 root [kworker/3:0H] 28 root [kdevtmpfs] 29 root [netns] 30 root [khungtaskd] 31 root [writeback] 32 root [kintegrityd] 33 root [bioset] 34 root [bioset] 35 root [bioset] 36 root [kblockd] 37 root [md] 38 root [edac-poller] 39 root [watchdogd] 45 root [kswapd0] 46 root [ksmd] 47 root [khugepaged] 48 root [crypto] 56 root [kthrotld] 58 root [kmpath_rdacd] 59 root [kaluad] 62 root [kpsmoused] 63 root [ipv6_addrconf] …… [root@MYDB01 ~]# |
参数 -e 显示所有进程信息,-o 参数控制输出。Pid
,**User
和 Args
参数显示PID
,运行应用的用户和该应用。