ps
是 Linux 系统中用于查看进程状态的标准命令,-ef
是其参数组合,用于输出系统范围内所有进程的完整信息。以下是对该参数的详细解析:
1. 核心参数含义
-e
表示显示所有进程(包括系统进程和用户进程),相当于-A
参数。该选项会列出系统中当前运行的所有进程,而不限于当前用户的会话。-f
表示以完整格式(Full Format)输出进程信息。这比默认输出提供更详细的字段,包括进程的用户、父子关系、启动时间等。
2. 输出格式说明
当执行 ps -ef
时,输出通常包含以下列(字段):
- UID:进程所有者的用户名。
- PID:进程的唯一标识符(Process ID)。
- PPID:父进程的 PID(Parent Process ID),显示进程的创建来源。
- C:CPU 利用率(百分比),表示进程的 CPU 使用情况。
- STIME:进程的启动时间或日期。
- TTY:与进程关联的终端设备(例如
tty1
表示本地终端,?
表示无关联终端)。 - TIME:进程已使用的累计 CPU 时间(格式为
HH:MM:SS
)。 - CMD:启动进程的命令行或可执行文件的名称。
3. 使用场景示例
3.1 基本用法:直接运行 ps -ef
可快速查看所有进程的详情
UID PID PPID C STIME TTY TIME CMD
root 540 1 0 2024 ? 00:02:21 /sbin/auditd
ntp 3690 1 0 2024 ? 00:00:26 /usr/sbin/ntpd -u ntp:ntp -g
root 2753 2716 17 2024 ? 42-07:05:06 /usr/local/jdk-21.0.4/bin/java -server -Xms4g -Xmx4g -XX:+UseG1GC -XX:G1HeapRegionSize
注意:数值 42-07:05:06
表示该进程自启动以来累计消耗的CPU时间。
- 非进程存活时长:此时间仅统计进程 实际占用 CPU 资源的时间,而非进程从启动至今的总运行时长(后者由
STIME
列表示进程的启动时间)。 - 累积计算:若进程多次运行,该值会累积历史 CPU 占用时间。
- 格式规则:当累计时间超过 24 小时,输出会自动转换为
天数-小时:分钟:秒
的格式(即42-07:05:06
代表 42 天 7 小时 5 分钟 6 秒)。
3.2 进阶使用:若需进一步筛选,可结合其他参数:
- ps -u <username> #显示指定用户的进程。
- ps -eLf #显示所有线程(
-L
扩展)。- ps -ef | grep -E 'nginx|mysql' # 同时匹配多个服务名,支持正则表达式
- ps -ef | grep '[s]shd' # 用字符集语法屏蔽 grep 进程自身
- ps -ef --sort=-%cpu | head -10 # CPU使用率倒序(前10)
- ps -ef --sort=+%mem | head -10 # 内存占用量正序 ,-为降序,+为升序,支持 %cpu, %mem, start_time 等字段。
- ps -e --forest | grep nginx # 直接生成指定进程的树状图
- ps -eo pid,user,cmd,etime # 显示进程PID、用户、命令、已运行时长 ps -e -o
- ppid=,comm= --no-header # 仅输出父进程ID和命令名(无标题行)
- watch "ps -ef --sort=-%cpu | grep -v 'ps -ef' | head -n 15" #实时筛选高负载进程
- ps -ef -u www-data | wc -l #统计特定用户进程数
PS: 僵尸进程筛选
# 筛选僵尸进程状态
- ps aux | awk '{if ($8=="Z" || $8=="Z+") print $0}'
# 定制化输出
- ps -e -o pid,ppid,stat,cmd | grep 'Z'
# 僵尸进程的影响与处理原则
- 影响:
僵尸进程不消耗 CPU/内存,但占用系统进程表项,过多时可能阻碍新进程创建。- 处理优先级:
优先检查父进程(PPID
)是否异常。若父进程为init
(PID=1),系统通常会定期回收,无需手动干预。- 预防措施:
检查程序代码中是否缺失对子进程的wait()
调用,确保正确回收资源。
4. 注意事项
- 兼容性:
-ef
参数在大多数 Linux 发行版中通用(如 Ubuntu、CentOS),但部分 BSD 变体可能使用不同语法(如ps aux
)。 - 性能影响:
ps -ef
通常无显著系统开销,但在进程数极高时,可配合grep
过滤输出(例如ps -ef | grep nginx
)。 - 其他常用参数可补充使用(如
-o
自定义输出字段、-p
指定 PID),但-ef
提供了便捷的默认完整视图。