ps
(Process Status)是 Linux 系统中用于查看进程状态的核心命令行工具。它提供系统当前运行进程的快照,显示进程 ID、CPU 和内存使用情况、运行状态等信息。作为系统管理员或开发人员,ps
是监控系统资源、排查性能问题和管理系统进程的必备工具。其灵活的选项和输出格式使其适用于从简单查询到复杂分析的各种场景。
ps
是一个经典的 Linux/Unix 命令,用于显示系统中运行进程的详细信息。它从 /proc
文件系统(虚拟文件系统,反映内核状态)获取数据,呈现进程的 PID(进程 ID)、用户、CPU 和内存占用、运行时间等。ps
支持多种输出格式(BSD、UNIX/System V)和丰富的选项,允许用户自定义显示内容,是系统监控和管理的核心工具。
ps [选项]
-
)-e
:显示所有进程(包括其他用户的)。-f
:完整格式输出,显示更多字段。-u
:按指定用户过滤进程。-p
:按 PID 选择进程。-C
:按命令名过滤进程。-o
:自定义输出字段。-
)aux
:显示所有用户的进程(a
)、包含无终端进程(x
)、详细输出(u
)。ax
:显示所有进程,包括无终端的进程。sudo
)。ps
提供快照,需结合 top
或 htop
实时监控。ps
通常预装于 Linux 发行版(如 Ubuntu、CentOS)。以下示例假设运行在 Linux 系统(如 Ubuntu 22.04 或 CentOS 8)。为确保清晰,输出字段将详细解释。
ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:01 ps
PID
:进程 ID。TTY
:控制终端。TIME
:累计 CPU 时间。CMD
:命令名。ps -e
-e
:显示所有进程,包括系统进程。 PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
1234 pts/0 00:00:00 bash
ps -ef
-e
:显示所有进程。-f
:完整格式,包含更多字段。UID PID PPID C STIME TTY TIME CMD
root 1 0 0 04:06 ? 00:00:02 /lib/systemd/systemd
user 1234 1200 0 04:06 pts/0 00:00:00 bash
user 5678 1234 0 04:06 pts/0 00:00:01 ps -ef
UID
:运行进程的用户。PPID
:父进程 ID。C
:CPU 利用率。STIME
:启动时间。ps -u user
-u user
:显示用户 user
的所有进程。 PID TTY TIME CMD
1234 pts/0 00:00:00 bash
1300 pts/0 00:00:01 vim
ps -p 1234
-p 1234
:显示 PID 为 1234 的进程。 PID TTY TIME CMD
1234 pts/0 00:00:00 bash
ps aux
a
:显示所有用户的进程。u
:用户导向的详细输出。x
:包含无终端的进程。USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 123456 7890 ? Ss 04:06 0:02 /lib/systemd/systemd
user 1234 0.0 0.2 45678 9012 pts/0 Ss 04:06 0:00 bash
%CPU
:CPU 使用百分比。%MEM
:内存使用百分比。VSZ
:虚拟内存大小(KB)。RSS
:实际内存使用(KB)。STAT
:进程状态(如 Ss、R、Z)。ps
提供多种高级功能,适合复杂监控和分析场景。以下是具体用法。
ps -eo pid,user,%cpu,%mem,comm
-e
:显示所有进程。-o
:自定义输出,指定字段。 PID USER %CPU %MEM COMMAND
1 root 0.0 0.1 systemd
1234 user 0.0 0.2 bash
pid
:进程 ID。ppid
:父进程 ID。start
:启动时间。etime
:运行时间。args
:完整命令行。ps -C sshd
-C sshd
:显示命令名为 sshd
的进程。 PID TTY TIME CMD
567 ? 00:00:01 sshd
ps aux --sort=-%cpu
--sort=-%cpu
:按 CPU 使用降序排序(-
表示降序)。--sort=-%mem
。USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 8901 5.2 2.1 987654 34567 pts/0 R 04:06 0:10 firefox
root 1 0.0 0.1 123456 7890 ? Ss 04:06 0:02 systemd
ps -e --forest
--forest
:以树形结构显示进程关系。 PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
1234 pts/0 00:00:00 bash
1300 pts/0 00:00:01 vim
ps -u user -o pid,%cpu,%mem,stat | grep R
-u user
:过滤用户 user
的进程。-o
:自定义输出字段。grep R
:过滤运行状态(R = running)的进程。 PID %CPU %MEM STAT
8901 5.2 2.1 R
-
)和 BSD(无 -
)选项不完全兼容,需正确选择。ps
显示静态快照,动态监控需用 top
或 htop
。-o
定制关键信息。S
:睡眠。R
:运行。Z
:僵尸。以下是高级技巧和实战案例,展示 ps
的强大功能。
ps aux --sort=-%cpu | head -n 5
--sort=-%cpu
:按 CPU 使用降序排序。head -n 5
:显示前 5 个进程。USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 8901 5.2 2.1 987654 34567 pts/0 R 04:06 0:10 firefox
user 9000 2.1 1.5 456789 23456 ? S 04:06 0:05 chrome
ps -e -o pid,stat | grep Z
-o pid,stat
:显示 PID 和状态。grep Z
:过滤状态为 Z(僵尸)的进程。 PID STAT
9999 Z
杀死父进程:
ps -o ppid= -p 9999 | xargs kill -9
ps -C sshd -o pid,user,%cpu,%mem,start,time
-C sshd
:过滤命令名为 sshd
的进程。-o
:自定义输出字段。 PID USER %CPU %MEM START TIME
567 root 0.0 0.1 04:06 00:00:01
ps -e | wc -l
-e
:列出所有进程。wc -l
:统计行数(进程数量)。123
#!/bin/bash
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "Process Status at $TIMESTAMP" >> /var/log/process.log
ps aux --sort=-%cpu | head -n 10 >> /var/log/process.log
sudo crontab -e
*/5 * * * * /path/to/script.sh
ps
常与其他工具结合,增强功能。
grep
结合ps -ef | grep sshd
sshd
相关进程。awk
结合ps -ef | awk '{print $2, $1, $8}'
top
结合top
ps -p $(pidof firefox) -o pid,%cpu,%mem
top
实时监控,ps
查看具体进程。kill
结合ps aux --sort=-%cpu | head -n 2 | awk 'NR==2 {print $2}' | xargs kill -9
ps
是 Linux 系统中查看和管理进程的核心工具,提供进程 ID、资源使用和状态等详细信息。文中从基础用法到高级技巧,结合具体示例和注意事项,全面介绍了 ps
的功能。无论是资源监控、故障排查还是自动化管理,ps
都能提供强大支持。