Linux下如何查看进程号?有哪些常用命令和操作步骤?

在Linux系统中,进程号(PID,Process ID)是操作系统中用于唯一标识每个进程的数字,管理进程、调试程序、监控系统资源时,都需要准确获取进程号,Linux提供了多种命令查看进程号,不同命令适用于不同场景,下面详细介绍这些方法及其实际应用。

linux下如何查看进程号

使用ps命令查看静态进程列表

ps(Process Status)是最基础、最常用的进程查看命令,用于显示当前运行的进程信息,包括进程号,默认情况下,ps仅显示当前终端下的进程,结合不同选项可查看所有进程或筛选特定进程。

常用选项及示例

  1. ps aux:以BSD格式显示所有进程的详细信息,包括用户、PID、CPU占用率、内存占用率、启动时间、命令等。

    ps aux

    输出示例(部分):

    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root           1  0.0  0.0  12800  8364 ?        Ss   09:30   0:02 /sbin/init splash
    root           2  0.0  0.0      0     0 ?        S    09:30   0:00 kthreadd
    root         1234  0.1  0.3  89424 27364 ?        Sl   09:31   0:05 /usr/lib/firefox/firefox

    其中第二列PID即为进程号,可通过grep进一步筛选,如查看nginx进程的PID:

    ps aux | grep nginx
  2. ps -ef:以System V格式显示所有进程,输出字段包括UID、PID、PPID(父进程ID)、C(CPU占用)、STIME(启动时间)、TTY(终端)、TIME(累计CPU时间)、CMD(命令)。

    ps -ef

    输出示例(部分):

    UID        PID  PPID  C STIME TTY          TIME CMD
    root          1     0  0 09:30 ?        00:00:02 /sbin/init splash
    root          2     0  0 09:30 ?        00:00:00 [kthreadd]
    root        1234     1  0 09:31 ?        00:00:05 /usr/lib/firefox/firefox

    ps aux不同,ps -efPPID字段可帮助分析进程父子关系,适合排查进程启动链。

  3. 自定义输出字段:通过-o选项指定需要显示的字段,仅获取PID时更简洁。

    ps -o pid,comm  # 显示PID和命令名
    ps -o pid,user,cmd  # 显示PID、用户和完整命令

ps命令常用选项总结

选项 说明
a 显示所有终端下的进程(包括其他用户)
u 以用户为中心显示进程(包含用户、CPU/内存占用)
x 显示无终端控制的进程(如后台服务)
-e 显示所有进程(等同于ax
-f 以完整格式显示进程(包含PPID、STIME等)
-o pid,comm 仅显示PID和命令名

使用pgrep命令高效筛选进程号

pgrep(Process ID Grep)是专门用于根据进程属性筛选PID的工具,比ps | grep更高效,直接输出符合条件的PID(默认每行一个)。

常用选项及示例

  1. 按进程名筛选:最常用场景,直接匹配进程名(不区分大小写)。

    pgrep nginx  # 输出nginx进程的所有PID

    若需显示进程名,加-l选项:

    linux下如何查看进程号

    pgrep -l nginx
  2. 按用户筛选:通过-u选项指定用户名或UID,查看特定用户的进程。

    pgrep -u root  # 查看root用户的进程PID
    pgrep -u 1000  # 查看UID为1000的进程PID
  3. 按父进程筛选:通过-P选项指定父进程ID(PPID),查找子进程。

    pgrep -P 1  # 查找父进程为PID=1的子进程(通常是系统关键进程)
  4. 完整命令匹配:通过-f选项匹配完整命令行(含参数),适合筛选带特定参数的进程。

    pgrep -f "nginx -g daemon"  # 匹配命令中包含"nginx -g daemon"的进程
  5. 反向筛选:通过-v排除符合条件的过程,如查找非root用户的进程:

    pgrep -v -u root

pgrep命令优势

  • 输出简洁:默认仅输出PID,适合脚本调用(如kill $(pgrep nginx)批量结束进程)。
  • 筛选灵活:支持按进程名、用户、终端、父进程等多维度筛选,避免grep的额外干扰(如grep进程本身可能出现在结果中)。

使用pidof命令快速获取进程名对应的PID

pidof是专门通过进程名获取PID的工具,比pgrep更简单,仅支持进程名匹配(不支持参数或用户筛选),适合快速查找单一进程的PID。

基本用法

pidof nginx  # 输出nginx进程的所有PID(空格分隔)
pidof -s nginx  # 仅输出第一个匹配的PID(-s=single)
pidof -o pid1 nginx  # 排除PID为1的nginx进程(-o=omit,常用于排除init进程)

示例输出:

1234 1235 1236  # nginx进程的多个PID

注意pidof仅匹配进程名,若进程名包含参数(如nginx -c /etc/nginx/nginx.conf),则无法匹配,此时需用pgrep -f

动态监控进程号:tophtop

tophtop是交互式进程监控工具,可实时查看进程列表及资源占用,支持动态排序、筛选,适合监控进程状态变化。

top命令

默认按CPU占用率降序排列,PID位于第二列(默认显示字段)。

  • 常用交互操作
    • P:按CPU占用率排序(默认)
    • M:按内存占用率排序
    • k:输入PID后终止进程
    • c:切换命令名/完整命令行显示
    • q:退出top

htop命令

htoptop的增强版,界面更友好(彩色显示、树状视图、支持鼠标操作),默认显示PID列,且可通过快捷键快速筛选:

  • F3:搜索进程名(实时过滤)
  • F4:按用户/命令筛选
  • t:切换树状视图(显示父子进程关系)
  • /:展开/折叠进程树

动态监控场景

top -p 1234  # 仅监控PID=1234的进程(适合跟踪特定进程)
htop --sort-key=MEM  # 按内存占用率初始排序

通过文件描述符或端口关联进程号

若需通过“打开的文件”或“监听端口”查找进程号,可使用lsof(List Open Files)命令。

linux下如何查看进程号

查看监听端口的进程号

lsof -i :80  # 查看80端口监听进程的PID

输出示例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx     1234  root    6u  IPv6   12345      0t0  TCP *:http (LISTEN)
nginx     1235 www-data 6u  IPv6   12345      0t0  TCP *:http (LISTEN)

其中PID列即为进程号。

查看打开特定文件的进程

lsof /var/log/nginx/access.log  # 查看打开该日志文件的进程PID

查看系统服务进程号(systemd)

对于使用systemd管理的系统服务(如Ubuntu 16.04+、CentOS 7+),可通过systemctl命令查看服务的PID。

基本用法

systemctl status nginx.service  # 查看nginx服务状态,包含Main PID

输出示例(关键部分):

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2023-10-01 09:31:00 CST; 1h 30min ago
 Main PID: 1234 (nginx)  # 此处即为主进程PID
   Tasks: 2 (limit: 1137)
   Memory: 5.4M
   CGroup: /system.slice/nginx.service
           ├─1234 nginx: master process /usr/sbin/nginx -g daemon on
           └─1235 nginx: worker process

若需仅获取PID,可结合grep提取Main PID

systemctl status nginx.service | grep "Main PID" | awk '{print $3}'

相关问答FAQs

Q1:如何根据端口号查找对应的进程号?
A:可通过lsofnetstat/ss命令实现。

  • 使用lsof(推荐):lsof -i :端口号,例如lsof -i :3306查看MySQL端口对应的进程。
  • 使用ss(netstat替代工具):ss -tunlp | grep :端口号,例如ss -tunlp | grep :80查看80端口监听进程。
  • 使用netstat(传统工具):netstat -tunlp | grep :端口号(需安装net-tools包)。

Q2:为什么ps auxps -ef输出的PID列表不同?
A:两者输出的PID列表本质上是相同的(均包含系统所有进程),但输出格式和字段顺序不同,可能导致视觉差异:

  • ps aux采用BSD格式,字段顺序为:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND,其中STAT列显示进程状态(如S=休眠、R=运行)。
  • ps -ef采用System V格式,字段顺序为:UID PID PPID C STIME TTY TIME CMD,包含PPID(父进程ID)字段,便于分析进程层级。
    若需对比PID是否一致,可提取PID列单独查看:

    ps aux | awk '{print $2}' | sort  # ps aux的PID列(第2列)
    ps -ef | awk '{print $3}' | sort  # ps -ef的PID列(第3列)

    两者输出的PID集合完全相同,仅显示方式和附加信息有差异。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30488.html

(0)
酷番叔酷番叔
上一篇 2025年9月25日 20:55
下一篇 2025年9月25日 21:17

相关推荐

  • linux命令端如何上一页

    Linux 命令端,可使用 Ctrl + U 或 `Page

    2025年8月14日
    5600
  • 如何安装linux视频教程

    先选择合适 Linux 发行版,再通过官网或可靠平台获取视频教程,按步骤

    2025年8月18日
    5500
  • CentOS停更后,最佳替代方案是什么?

    为什么需要编译内核?编译自定义Linux内核通常用于:启用官方内核未包含的特定硬件驱动启用实验性功能或安全模块优化系统性能(如服务器调优)学习操作系统底层原理重要警告:⚠️ 错误的内核操作可能导致系统无法启动⚠️ 建议在虚拟机或测试机操作⚠️ 全程需要root权限准备工作安装编译工具链sudo apt upda……

    2025年7月21日
    6800
  • Linux中如何建立文件夹?

    在Linux操作系统中,建立文件夹(也称为“目录”)是日常管理和系统维护的基础操作之一,无论是开发者、系统管理员还是普通用户,掌握创建文件夹的方法都是必备技能,Linux下创建文件夹主要通过命令行工具实现,同时也支持图形界面的操作方式,本文将详细介绍命令行中的核心命令mkdir、常用参数及场景应用,并简要说明图……

    2025年8月29日
    15200
  • 在Linux操作系统中,当程序进入全屏显示时,如何正确退出全屏状态?

    在Linux系统中,全屏模式广泛应用于终端、图形应用、虚拟机等多种场景,但退出方式因工具和界面类型不同而存在差异,掌握正确的退出方法不仅能提升操作效率,还能避免因操作不当导致的系统异常,本文将分场景详细说明退出全屏的技巧,涵盖常见工具和特殊情况,并附上实用FAQs,命令行终端全屏退出Linux终端是用户最常接触……

    2025年9月9日
    3500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信