Linux 进程名查看与pkill命令的使用

1. 概述

本文基于 Linux 系统环境,详细介绍进程名的查看方法、不同命令间的进程名显示差异原因,以及基于进程名的进程终止操作,解决实际使用中"进程名显示不一致""杀进程失败"等常见问题。

2. 常用进程名查看命令

Linux 提供多种工具查看进程名,核心命令包括 pspgreptophtop,各命令的适用场景与输出特点不同,具体如下:

2.1 ps 命令(静态查看)

ps 是最基础的进程静态查看工具,可通过不同选项组合获取进程名及详细信息,适用于"一次性查看进程快照"场景。

命令格式 功能说明 进程名位置
ps aux 显示系统所有进程的完整信息(含用户、PID、内存占用等) 最后一列 COMMAND(进程启动命令+参数,含完整路径)
ps -ef 显示系统所有进程的简洁信息(含父PID、启动时间等) 最后一列 CMD(同 COMMAND,完整命令+参数)
ps -p <PID> -o comm= 查看指定 PID 的简短进程名 仅输出 comm 字段(截断后的简短进程名)

示例输出(ps -ef

bash 复制代码
UID        PID  PPID  C STIME TTY          TIME CMD
root      1234     1  0 09:00 ?        00:00:05 /usr/sbin/sshd -D  # CMD列:完整命令(含路径+参数)
user      5678  1234  0 09:30 pts/0    00:00:01 ./AppBackgroundService  # CMD列:自定义进程的完整启动命令

2.2 pgrep 命令(按名查PID)

pgrep 专门用于"通过进程名匹配 PID",默认仅输出 PID,加 -l 选项可同时显示"PID+进程名",适用于"快速定位目标进程PID"场景。

命令格式 功能说明 进程名来源
pgrep <进程名关键字> 输出匹配关键字的进程PID 默认读取内核 comm 字段(截断后的简短进程名)
pgrep -l <进程名关键字> 输出"PID+进程名" 同左,显示截断后的 comm 字段
pgrep -fl <进程名关键字> 输出"PID+完整命令行" 读取进程命令行字段(无截断,同 ps -efCMD 列)

示例输出

bash 复制代码
# 未加-f:匹配comm字段(截断后)
pgrep -l AppBackground  # 输出:5678 AppBackgroundSe(进程名截断为15字符)

# 加-f:匹配完整命令行(无截断)
pgrep -fl AppBackground  # 输出:5678 ./AppBackgroundService(完整命令)

2.3 top/htop 命令(动态监控)

  • top:系统自带的实时进程监控工具,默认按 CPU 使用率排序,进程名在 COMMAND 列(同 psCMD 列)。
  • htoptop 的增强版(需手动安装),界面更友好,进程名显示在右侧 COMMAND 列,支持鼠标操作。

操作说明

  • q 退出监控界面;
  • P 按 CPU 使用率排序,按 M 按内存使用率排序。

3. ps -efpgrep -l 进程名差异解析

3.1 核心原因:进程的两个"名称字段"

Linux 内核为每个进程维护两个关键"名称相关字段",不同命令读取的字段不同,导致显示差异:

字段名称 存储内容 长度限制 读取命令
命令行字段(cmdline) 进程启动时的完整命令(含路径、参数) 无固定限制(取决于系统配置) ps -efps auxpgrep -f
进程名字段(comm) 进程的"简短名称"(通常为可执行文件名,不含路径) 默认15个字符(超过部分自动截断) pgrep -l(默认)、ps -o comm

3.2 案例分析(以 ./AppBackgroundService 为例)

  1. 进程启动命令./AppBackgroundService(可执行文件名 AppBackgroundService);
  2. 名称长度计算AppBackgroundService 共 20 个字符(超过 15 字符限制);
  3. 字段存储结果
    • 命令行字段(cmdline):完整存储 ./AppBackgroundService(无截断);
    • 进程名字段(comm):自动截断为前 15 个字符 AppBackgroundSe
  4. 命令显示差异
    • ps -ef:读取 cmdline 字段,显示 ./AppBackgroundService
    • pgrep -l:默认读取 comm 字段,显示 AppBackgroundSe

3.3 如何统一两者的显示结果

若需让 pgrep 显示与 ps -ef 一致的完整进程名,需使用 -f 选项(强制匹配命令行字段):

bash 复制代码
# 显示完整命令行(与ps -ef的CMD列一致)
pgrep -fl AppBackgroundService  # 输出:5678 ./AppBackgroundService

4. 基于进程名终止进程的方法

杀进程工具(如 pkillkillall)默认匹配的是 comm 字段(截断后的进程名),因此需根据工具的匹配规则选择正确的进程名。

4.1 常用杀进程命令

命令格式 匹配字段 适用场景 示例
pkill <截断后的进程名> comm 字段 已知进程名被截断时 pkill AppBackgroundSe(终止上文示例进程)
pkill -f <完整进程名/命令> cmdline 字段 需精确匹配完整命令时 pkill -f ./AppBackgroundService
killall <截断后的进程名> comm 字段 终止所有同名进程 killall AppBackgroundSe
killall -f <完整进程名> cmdline 字段 终止所有匹配完整命令的进程 killall -f ./AppBackgroundService

4.2 注意事项

  • 若进程名包含特殊字符(如 ./-),使用 pkill -f 时需确保命令行匹配完整(避免误杀其他进程);
  • 若不确定进程名是否被截断,可先通过 ps -ef | grep <关键字> 确认完整命令,再用 pkill -f <完整命令> 终止。

5. 常见问题与解决方案

常见问题 原因 解决方案
ps -ef 显示完整路径,想只看简短进程名 ps -ef 默认读取 cmdline 字段 使用 ps -ef -o pid,comm(显示 PID+简短进程名)
pgrep -l 显示的进程名比 ps -ef pgrep 默认读取 comm 字段(15字符限制) -f 选项:pgrep -fl <关键字>
用完整进程名杀进程失败(如 pkill AppBackgroundService pkill 默认匹配 comm 字段(截断后) 方案1:用截断后的名称(pkill AppBackgroundSe);方案2:加 -f 匹配完整命令(pkill -f AppBackgroundService

6. 常用命令速查表

需求场景 推荐命令 说明
查看所有进程的完整信息(含路径) ps auxps -ef 静态快照,适合一次性查看
快速定位进程PID(已知部分名称) pgrep -l <关键字> 默认显示截断后的进程名
查看指定PID的简短进程名 ps -p <PID> -o comm= 排除路径和参数干扰
实时监控进程(含资源占用) tophtop 动态刷新,适合排查高资源占用进程
精确终止指定进程(已知完整命令) pkill -f <完整命令> 避免因进程名截断导致杀进程失败
相关推荐
美好的事情能不能发生在我身上5 小时前
Linux实用操作以及基础命令
linux·运维·服务器
笨蛋少年派5 小时前
Shell常用快捷键和常用文件操作命令
linux·运维·服务器
微学AI5 小时前
内网穿透的应用-RemoteJVMDebug+cpolar:内网服务器调试的无界解决方案
运维·服务器
Yan-英杰5 小时前
Amazon SES + NestJS 实战:零成本打造高送达率邮箱验证方案
java·服务器·前端·网络·数据库·ai
零基础的修炼5 小时前
Linux---文件系统
linux·运维·服务器
十八旬6 小时前
苍穹外卖项目实战(day11-1)-记录实战教程、问题的解决方法以及完整代码
服务器·数据库·windows·redis
花开富贵贼富贵6 小时前
Nginx核心配置
运维·nginx
浅拾光º6 小时前
mysql重启,服务器计划重启,如何优雅地停止MySQL?
服务器·mysql·adb
许怀楠6 小时前
【Linux】环境变量
linux