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能读写NTFS吗

    在Linux系统中处理NTFS文件系统涉及两种常见需求:一是挂载并读写NTFS分区(如访问Windows数据盘),二是将NTFS格式转换为其他文件系统(如ext4或FAT32),以下是详细操作指南,操作前请务必备份重要数据,避免不可逆损失,Linux原生内核仅支持NTFS的只读访问,要实现读写支持,需安装第三方……

    2025年7月31日
    3400
  • Linux端口如何开启?

    开放端口前的准备确认需要开放的端口号HTTP服务:80/TCPHTTPS服务:443/TCPSSH服务:22/TCP自定义服务:如3000/TCP检查端口是否已被监听运行命令查看当前监听端口的服务:sudo ss -tuln | grep LISTEN# 或使用传统命令sudo netstat -tuln……

    2025年7月10日
    5200
  • cp命令深度使用技巧

    在Linux系统中,拷贝文件夹是日常操作中的高频需求,无论是备份数据、迁移项目还是部署环境都离不开它,作为开源生态的核心工具,Linux通过命令行提供了高效精准的文件夹拷贝方案,以下从原理到实践详细解析操作方法,兼顾安全性与灵活性:cp(copy)命令是Linux文件操作的基础工具,其核心参数决定了拷贝行为:c……

    2025年7月8日
    5500
  • Linux下如何通过TCP搜索指定端口进程?

    在Linux系统中,排查端口占用问题或定位特定端口对应的进程是日常运维和开发中的常见需求,当需要查找某个TCP端口被哪个进程占用时,可以通过多种命令实现,每种命令的适用场景和输出格式略有不同,本文将详细介绍这些方法及其使用技巧,使用netstat命令查找端口进程netstat是传统的网络状态查看工具,虽然在新版……

    2025年10月5日
    800
  • linux7如何做bond6

    Linux7中配置bond6需要编辑网络配置文件,启用IPv6 bonding,并设置

    2025年8月18日
    3000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信