Linux下Shell编程之ps命令详解及示例
ps
(process status)命令用于显示当前系统中的进程状态。它可以提供关于每个进程的详细信息,如进程ID、运行时间、CPU和内存使用情况等。ps
命令非常适合于监控和管理系统进程。
一、基本用法
ps [选项]
如果不指定任何选项,ps
命令通常会显示与当前终端会话相关的进程信息。
常用选项
a
:显示与终端相关的所有进程。u
:以用户为中心的格式显示进程信息。x
:显示没有控制终端的进程。e
:显示所有进程。f
:以完整格式显示进程信息,包括父进程ID和进程层次结构。l
:以长格式显示进程信息,包括CPU和内存使用情况。o
:自定义输出格式,后面跟要显示的字段名(用逗号分隔)。C
:按命令名筛选进程。p
:按进程ID筛选进程。
输出字段含义
- PID:进程ID。
- PPID:父进程ID。
- C:CPU使用率(百分比)。
- STIME:进程启动时间。
- TTY:终端类型。
- TIME:进程使用的CPU时间。
- CMD:命令名或命令行。
示例
示例 1:显示当前用户的所有进程
ps u
输出示例(部分):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
username 12345 0.5 1.2 123456 7890 ? Ss 12:34 0:01 /usr/bin/bash
示例 2:显示所有进程
ps e
输出将包含系统中所有进程的简要信息。
示例 3:以完整格式显示进程信息
ps f
输出示例(部分):
UID PID PPID C STIME TTY TIME CMD
username 12345 23456 0 12:34 pts/0 00:00:01 /usr/bin/bash
username 23456 1 0 12:33 ? 00:00:00 /sbin/init
示例 4:自定义输出格式
假设你想要显示进程ID、命令名和CPU使用率,可以使用以下命令:
ps -eo pid,cmd,%cpu
输出示例(部分):
PID CMD %CPU
12345 /usr/bin/bash 0.5
23456 /sbin/init 0.1
示例 5:按进程ID筛选进程
假设你想要查看进程ID为12345的进程信息,可以使用以下命令:
ps -p 12345
输出将包含进程ID为12345的进程的详细信息。
示例 6:按命令名筛选进程
假设你想要查看所有包含“bash”的进程信息,可以使用以下命令:
ps -C bash -f
输出将包含所有命令名包含“bash”的进程的完整信息。
二、用ps监控CPU使用情况
要使用 ps
命令监控CPU使用情况,你可以使用 ps
命令的特定选项和参数来显示与CPU使用率相关的信息。以下是一些常用的方法和示例:
方法一:使用 ps aux
并筛选CPU使用率
ps aux --sort=-%cpu | head
这个命令会列出当前系统中所有的进程,并按照CPU使用率从高到低排序。--sort=-%cpu
选项指定按CPU使用率降序排序,head
命令则用于只显示前几行(默认是前10行)。
方法二:使用 ps -eo
自定义输出格式
你可以使用 ps -eo
选项来自定义输出格式,只显示你感兴趣的字段,比如进程ID(PID)、命令名(CMD)和CPU使用率(%CPU)。
ps -eo pid,cmd,%cpu | grep -v grep | sort -k3 -nr | head
这个命令会列出所有进程的PID、命令名和CPU使用率,并使用 grep -v grep
排除掉包含“grep”本身的行(因为你在使用grep过滤输出时,grep命令本身也会出现在输出中)。然后,使用 sort -k3 -nr
按照CPU使用率从高到低排序,最后使用 head
显示前几行。
方法三:结合 watch
命令实时监控
如果你想要实时监控CPU使用情况,可以结合使用 watch
命令。watch
命令会定期运行指定的命令,并刷新输出。
watch -n 1 'ps -eo pid,cmd,%cpu --sort=-%cpu | head'
这个命令会每秒运行一次 ps -eo pid,cmd,%cpu --sort=-%cpu | head
,并刷新显示结果,从而实时监控CPU使用率最高的进程。
示例输出
假设你运行了上述某个命令,输出可能类似于以下内容:
PID CMD %CPU
12345 some_cpu_intensive_process 50.0
23456 another_process 10.5
34567 bash 0.3
在这个例子中,进程ID为12345的进程正在使用大量的CPU资源(50.0%),而进程ID为34567的bash进程则只使用了很少的CPU资源(0.3%)。