ps命令
Linux是一个多任务、多用户的操作系统,因此它允许多个进程同时运行而不相互干扰,进程是Linux操作系统的重要基本概念之一,进程是程序的执行实例,在操作系统中执行不同的任务。Linux为我们提供了一个名为ps的实用程序,用于查看与系统上的进程相关的信息,它是process status进程状态的缩写,ps命令用于列出当前正在运行的进程,它们的pid以及一些其他信息取决于不同的选项,它从/proc文件系统中的虚拟文件读取进程信息,/proc包含虚拟文件,这就是它被称为虚拟文件系统的原因,process status命令ps显示有关活动进程的信息,类似于windows的任务管理器,每个操作系统的ps版本都略有不同,因此若要是需要获取详细情况则需要查阅操作系统的wiki。
参数
ps命令有多种类别的参数可以选择: simple|list|output|threads|misc|all。
Simple Process Selection
-A, -e: 选择所有进程。
-a: 选择除会话引线和与终端无关的进程之外的所有进程。
a: 列出带有终端tty的所有进程,包括其他用户进程,或者在与x选项一起使用时列出所有进程。
-d: 选择除会话所属者以外的所有进程。
-N, --deselect: 选择除满足指定条件的进程以外的所有进程。
r: 将选择限制为仅运行进程。
T: 选择与此终端关联的所有进程。
x: 列出拥有的所有进程(和ps相同的EUID),或者在和a选项一起使用时列出所有进程。
Process Selection By List
-C <command>: 按命令名选择,这将选择其可执行名称在command中给定的进程。
-G, --Group <GID>: 按真实组ID (RGID)或名称选择,这将选择其真实组名或ID在grplist列表中的进程。
-g, --group <group>: 按会话或有效组名选择。
-p, p, --pid <PID>: 按进程ID选择。
--ppid <PID>: 按父进程ID选择,这将选择pidlist中具有父进程ID的进程,也就是说,它选择的进程是pidlist中列出的那些进程的子进程。
-q, q, --quick-pid <PID>: 按进程ID选择(快速模式)。
-s, --sid <session>: 按会话ID选择。
-t, t, --tty <tty>: 通过tty (terminal)选择。
-u, U, --user <UID>: 根据有效的用户ID (EUID)或名称选择。
-U, --User <UID>: 按真实用户ID (RUID)或名称选择。
Output Format Control
-F: 额外的完整格式。
-f: 进行全格式列表,可以将此选项与其他UNIX样式的选项结合使用以添加其他列,它还会导致命令参数被打印,与-L一起使用时,将添加NLWP线程数和LWP线程ID列。
f, --forest: ASCII art进程层次结构,如许多树,也称为林。
-H: 显示进程层次结构(林)。
-j: 作业格式。
j: BSD作业控制格式。
-l: 长格式,-y选项通常对此很有用。
l: 显示BSD长格式。
-M, Z: 对于SE Linux添加一列安全数据。
-O <format>: 使用默认列预加载。
O <format>: 与-O类似,具有BSD特性。
-o, o, --format <format>: 指定用户定义的格式。
s: 显示信号格式。
u: 显示面向用户的格式。
v: 显示虚拟内存格式。
X: 寄存器格式。
-y: 不显示标志,显示rss代替addr,此选项只能与-l一起使用。
--context: 使用SE Linux时,显示安全上下文格式。
--headers: 重复标题行,每页输出一行。
--no-headers: 完全不打印标题行。
--cols, --columns, --width <num>: 设置屏幕宽度。
--rows, --lines <num>: 设置屏幕高度。
Thread Display
H: 将线程显示为进程。
-L: 显示线程,可能带有LWP和NLWP列。
-m, m: 在进程之后显示线程。
-T: 显示线程,可能带有SPID列。
Miscellaneous options
-c: 为-l选项显示不同的调度程序信息。
c: 显示真实的命令名称。
e: 在命令后显示环境。
k, --sort: 指定排序顺序为[+|-]key[,[+|-]key[,...]]。
L: 显示格式说明符。
n: 显示数字uid和wchan。
S, --cumulative: 包含一些dead子进程数据。
-y: 不显示标志,显示rss,仅与-l一起使用。
-V, V, --version: 显示版本信息。
-w, w: 无限制的输出宽度。
示例
显示当前shell的进程。
ps
[root@tym tian]# ps
PID TTY TIME CMD
29221 pts/0 00:00:00 su
29231 pts/0 00:00:00 bash
29245 pts/0 00:00:00 ps
查看所有正在运行的进程。
ps -e
[root@tym tian]# ps -e
PID TTY TIME CMD
1 ? 02:20:13 systemd
2 ? 00:00:00 kthreadd
4 ? 00:00:00 kworker/0:0H
6 ? 00:09:28 ksoftirqd/0
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 02:14:18 rcu_sched
10 ? 00:00:00 lru-add-drain
11 ? 00:04:41 watchdog/0
13 ? 00:00:00 kdevtmpfs
14 ? 00:00:00 netns
15 ? 00:00:30 khungtaskd
16 ? 00:00:00 writeback
17 ? 00:00:00 kintegrityd
18 ? 00:00:00 bioset
19 ? 00:00:00 bioset
20 ? 00:00:00 bioset
21 ? 00:00:00 kblockd
22 ? 00:00:00 md
通常查看所有进程可以与管道以及grep命令结合用以过滤
ps -e | grep nginx
[root@tym tian]# ps -e | grep nginx
23456 ? 00:00:00 nginx
23458 ? 00:00:20 nginx
查看除会话引线和未与终端关联的进程之外的所有进程。
ps -a
[root@tym tian]# ps -a
PID TTY TIME CMD
29221 pts/0 00:00:00 su
29231 pts/0 00:00:00 bash
29385 pts/0 00:00:00 ps
查看www用户的所有进程。
ps -u tian
[root@tym tian]# ps -u tian
PID TTY TIME CMD
29171 ? 00:00:00 sshd
29175 pts/0 00:00:00 bash
29200 ? 00:00:00 sshd
29201 ? 00:00:00 sftp-server
查看www组的所有进程。
ps -G www
[root@tym tian]# ps -G tian
PID TTY TIME CMD
29171 ? 00:00:00 sshd
29175 pts/0 00:00:00 bash
29200 ? 00:00:00 sshd
29201 ? 00:00:00 sftp-server
29221 pts/0 00:00:00 su
使用-f查看完整格式列表。
ps -f
[root@tym tian]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 29221 29175 0 21:53 pts/0 00:00:00 su
root 29231 29221 0 21:54 pts/0 00:00:00 bash
root 29513 29231 0 21:58 pts/0 00:00:00 ps -f
按用户自定义格式查看进程。
ps -aN --format cmd,pid,user,ppid
[root@tym tian]# ps -aN --format cmd,pid,user,ppid
CMD PID USER PPID
/usr/lib/systemd/systemd -- 1 root 0
[kthreadd] 2 root 0
[kworker/0:0H] 4 root 2
[ksoftirqd/0] 6 root 2
[migration/0] 7 root 2
[rcu_bh] 8 root 2
[rcu_sched] 9 root 2
[lru-add-drain] 10 root 2
[watchdog/0] 11 root 2
根据内存占用情况将进程排序。
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
[root@tym tian]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
PID PPID CMD %MEM %CPU
14744 14674 /usr/sbin/mysqld --basedir= 10.9 0.2
16907 16904 php-fpm: pool www 2.4 0.0
16906 16904 php-fpm: pool www 2.4 0.0
19889 16904 php-fpm: pool www 2.4 0.0
19894 16904 php-fpm: pool www 2.4 0.0
6440 16904 php-fpm: pool www 2.2 0.0
19888 16904 php-fpm: pool www 2.1 0.0
19895 16904 php-fpm: pool www 2.1 0.0
19892 16904 php-fpm: pool www 2.1 0.0
显示所有当前进程,为了便于查看可以结合管道和less命令来使用。
ps -ax | less
PID TTY STAT TIME COMMAND
1 ? Ss 140:13 /usr/lib/systemd/systemd --system --deserialize 27
2 ? S 0:00 [kthreadd]
4 ? S< 0:00 [kworker/0:0H]
6 ? S 9:28 [ksoftirqd/0]
7 ? S 0:00 [migration/0]
8 ? S 0:00 [rcu_bh]
使用aux参数,加入CPU与内存用量信息,来显示全面的信息。
ps -aux | less
根据CPU使用将进程降序排序。
ps -aux --sort -pcpu | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 8020 2.1 0.7 132292 13248 ? S<sl Feb22 802:22 /usr/local/aegis/aegis_client/aegis_11_19/AliYunDun
mysql 14744 0.2 10.9 1319400 206924 ? Sl 2019 2581:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tym.err --pid-file=/var/lib/mysql/tym.pid
root 1 0.0 0.1 191204 3140 ? Ss 2019 140:13 /usr/lib/systemd/systemd --system --deserialize 27
root 2 0.0 0.0 0 0 ? S 2019 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 2019 9:28 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 2019 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 2019 134:18 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 2019 0:00 [lru-add-drain]
根据内存使用将进程降序排序。
ps -aux --sort -pmem | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 14744 0.2 10.9 1319400 206924 ? Sl 2019 2581:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tym.err --pid-file=/var/lib/mysql/tym.pid
apache 16907 0.0 2.4 423712 46896 ? S 2020 13:36 php-fpm: pool www
apache 16906 0.0 2.4 423492 46700 ? S 2020 13:34 php-fpm: pool www
apache 19889 0.0 2.4 422908 46312 ? S 2020 13:08 php-fpm: pool www
apache 19894 0.0 2.4 423204 45228 ? S 2020 13:10 php-fpm: pool www
apache 6440 0.0 2.2 418440 42148 ? S 2020 13:36 php-fpm: pool www
apache 19888 0.0 2.1 417888 41296 ? S 2020 13:09 php-fpm: pool www
apache 19895 0.0 2.1 417404 40948 ? S 2020 13:06 php-fpm: pool www
apache 19892 0.0 2.1 417152 40676 ? S 2020 13:14 php-fpm: pool www
apache 16908 0.0 2.1 417140 40668 ? S 2020 13:36 php-fpm: pool www
apache 5424 0.0 2.1 416916 40444 ? S 2020 13:36 php-fpm: pool www
apache 16909 0.0 2.1 416372 39896 ? S 2020 13:39 php-fpm: pool www
apache 13608 0.0 2.1 417680 39856 ? S 2020 13:18 php-fpm: pool www
apache 19893 0.0 2.0 415340 39040 ? S 2020 13:14 php-fpm: pool www
合并内存与CPU的整体使用情况进行排序,并只显示前10个结果。
ps -aux --sort -pcpu,+pmem | head -n 10
[root@tym tian]# ps -aux --sort -pcpu,+pmem | head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 8020 2.1 0.7 132292 13248 ? S<sl Feb22 802:23 /usr/local/aegis/aegis_client/aegis_11_19/AliYunDun
mysql 14744 0.2 10.9 1319400 206924 ? Sl 2019 2581:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tym.err --pid-file=/var/lib/mysql/tym.pid
root 2 0.0 0.0 0 0 ? S 2019 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 2019 9:28 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 2019 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 2019 134:18 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 2019 0:00 [lru-add-drain]
查看某个进程启动时间:
ps -o lstart -p 23456
[root@tym tian]# ps -o lstart -p 23456
STARTED
Fri May 28 00:24:52 2021