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 <完整命令> 避免因进程名截断导致杀进程失败
相关推荐
Yana.nice1 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月1 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
想逃离铁厂的老铁1 小时前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
小白跃升坊2 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey2 小时前
【Linux】线程同步与互斥
linux·笔记
杨江2 小时前
seafile docker安装说明
运维
舰长1152 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀2 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng2 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.2 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居