ps指令在Linux系统中的详解
功能:
ps 是 “process status” 的缩写,用于查看当前系统中的进程状态。该命令可以列出系统中正在运行的进程,以及这些进程的相关信息,如进程ID、父进程ID、启动时间、终端类型、CPU和内存占用等。
基本用法:
ps [options]
常用参数选项:
-e:列出所有进程。
-f:完整格式显示。
-l:长格式显示。
-u:以用户为中心的格式显示。
-x:显示没有控制终端的进程。
-a:列出所有进程,包括其他用户的进程。
-w:宽格式显示。
-C:按列显示,指定列名。
-o:用户自定义格式。
-n:显示进程的PID,而不显示命令名。
-p:指定PID列出进程。
-c:显示命令的完整路径。
-L:显示线程,可能与 -p 一起使用来显示指定PID的线程。
–sort:按指定字段排序,如 –sort=pid,–sort=-%cpu(降序)。
输出结果的解读:
下面是 ps -aux 命令输出结果的详细解读:
列解释
USER:进程的拥有者。这列显示启动该进程的用户名称。
PID:进程ID。每个进程都有一个唯一的数字ID,用于在系统中标识它。
%CPU:进程占用的 CPU 使用率。这列显示进程当前占用的 CPU 百分比,它表示进程使用 CPU 的时间比例。
%MEM:进程占用的内存使用率。这列显示进程当前占用的物理内存百分比,它表示进程使用的 RAM 量。
VSZ:虚拟内存大小。这列显示进程所使用的虚拟内存总量,通常以 KB 或 MB 为单位。虚拟内存是进程可以访问的内存总量,包括交换出去的部分。
RSS:常驻内存集合大小。这列显示进程当前在物理内存中占用的空间大小,不包括交换出去的部分。RSS 是实际分配给进程的物理内存量。
TTY:终端类型。这列显示进程与哪个终端相关联。和 ps 命令的 TTY 列一样,常见的值有 tty1、tty2 等表示物理控制台,pts/0、pts/1 等表示伪终端。
STAT:进程状态。这列显示进程的当前状态,常见的状态有:
R (running):进程正在运行,或者在运行队列中等待运行。
S (sleeping):进程处于休眠状态,它是空闲的,但是可以被某些信号唤醒。
T (stopped):进程已经被停止。这通常是因为进程收到了一个 SIGSTOP、SIGTSTP 或 SIGTTIN 信号。
Z (zombie):僵尸进程。这是一个已经终止的进程,但它的父进程还没有回收(或者说“等待”)它的资源。僵尸进程不占用任何系统资源,除了进程表中的一个条目。
D (disk sleep):不可中断的休眠状态。这通常意味着进程正在等待 I/O 操作(例如磁盘操作)完成。在这个状态下,进程不能被任何信号打断。
s (session leader):会话领头进程。该进程是会话的控制者,它可以控制该会话中的其他进程。
l (multi-threaded):多线程进程。这表示进程使用了多线程库(如 NPTL),并且可能有多个线程在运行。
+ (foreground):位于前台的进程组。这通常与作业控制相关,表明该进程是当前终端的前台进程组的一部分。
WCHAN (waiting channel):正在等待的进程资源。这通常是一个地址,进程正在等待该地址上的资源变为可用状态。
< (high priority):高优先级进程。该进程具有比其他进程更高的优先级,因此它更有可能获得 CPU 时间。
N (low priority):低优先级进程。该进程具有比其他进程更低的优先级,因此它获得 CPU 时间的机会较小。
L (memory locked):有些内存页被锁定到内存中。这意味着这些页面不能被交换出物理内存。
START:进程启动时间。这列显示进程的启动时间,通常是从系统启动到现在的累计时间。
TIME:CPU 时间。这列显示进程启动后占用的总 CPU 时间,它包括了用户态和内核态的时间。
COMMAND:命令名/命令行。这列显示启动进程的命令名称及其参数。这是了解进程正在做什么的关键信息。
示例解读
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 19328 3104 ? Ss Mar06 0:02 /usr/lib/systemd/systemd
daemon 567 0.0 0.2 15324 1564 ? Ssl Mar06 0:00 /usr/sbin/sshd -D
第一行显示的是 systemd 进程,它是系统的初始化进程,PID 为 1。该进程由 root 用户启动,当前占用的 CPU 和内存资源很少。它自 Mar06(3月6日)以来一直在运行,并且已经使用了少量的 CPU 时间。
第二行显示的是 sshd 进程,它是 SSH 守护进程,用于处理 SSH 连接。该进程由 daemon 用户启动,并且也在后台运行(由 Ssl 状态指示)。和 systemd 一样,它也使用了少量的资源。
通过 ps -aux 命令的输出,管理员可以获取关于系统上所有进程的详细信息,这对于系统监控、性能分析以及故障诊断非常有用。
常见使用场景:
查看所有进程:
ps -e
查看特定用户的进程:
ps -u username
按CPU使用率排序并查看前5个进程:
ps --sort=-%cpu | head -n 6
查看特定PID的进程信息:
ps -p 12345
查看进程的完整路径:
ps -C processname -o pid,comm,args
注意事项:
ps 命令的输出可能会非常庞大,特别是当有很多进程正在运行时。使用 grep 可以帮助你过滤结果,例如 ps -aux | grep nginx。
不同的Linux发行版可能会有些许差异,尤其是在输出的默认格式上。
使用 -o 参数时,你需要知道确切的列名。你可以通过 man ps 或 ps –help 查看所有可用的列名。
ps 命令是即时显示的,它不会持续更新。如果你需要实时查看进程状态,可以考虑使用 top 或 htop 命令。