菜鸟科技网

Linux显示进程命令有哪些?

Linux系统中,显示进程是日常运维和开发中最常见的操作之一,通过查看进程可以了解系统的运行状态、资源占用情况以及进程间的关系,Linux提供了多种命令来显示进程信息,每个命令都有其独特的功能和适用场景,下面将详细介绍这些命令的使用方法及其输出信息的含义。

Linux显示进程命令有哪些?-图1
(图片来源网络,侵删)

最基础也是最常用的进程显示命令是psps命令用于报告当前进程的快照,它可以显示与当前终端相关的进程,或者显示系统中所有进程。ps命令的基本用法非常简单,直接在终端输入ps即可显示当前终端下运行的进程,包括进程ID(PID)、终端(TTY)、时间(TIME)和命令(CMD)。ps命令的输出可能如下:

  PID TTY          TIME CMD
 1234 pts/0    00:00:01 bash
 5678 pts/0    00:00:00 ps

这里的PID是进程的唯一标识符,TTY表示进程所在的终端,TIME是进程累计占用CPU的时间,CMD是启动进程的命令,如果需要查看系统中所有进程,可以使用ps -efps aux选项。ps -ef以System V格式显示所有进程,而ps aux以BSD格式显示所有进程。ps aux的输出会包含更多列信息,如用户(USER)、PID、%CPU(CPU占用率)、%MEM(内存占用率)、VSZ(虚拟内存大小)、RSS(常驻内存集大小)、STAT(进程状态)、START(启动时间)和COMMAND(命令)。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19356  1544 ?        Ss   May01   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    May01   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   May01   0:00 [rcu_gp]
...

ps aux的输出中,STAT列的字符表示进程的状态,常见的状态有:R(运行中)、S(休眠中,可被唤醒)、D(不可中断的休眠状态)、Z(僵尸进程)、T(停止状态)等,通过ps命令的组合选项,可以更灵活地筛选进程,例如ps -ef | grep nginx可以查找所有包含nginx关键词的进程。

另一个强大的进程查看工具是top命令。top命令与ps不同,它会动态更新进程列表,默认每3秒刷新一次,非常适合实时监控系统资源使用情况和进程状态。top命令的输出分为两部分:上半部分是系统整体信息,包括进程总数、运行中进程数、休眠进程数、CPU使用率(分为用户空间、内核空间、空闲等)、内存使用情况(总内存、已用内存、空闲内存、缓存等);下半部分是进程列表,默认按CPU占用率降序排列。

Linux显示进程命令有哪些?-图2
(图片来源网络,侵删)
top - 12:34:56 up 10 days,  2:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 123 total,   1 running, 122 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8175732 total,  3456788 free,  2345678 used,  2373266 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  4567892 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1234 root      20   0  123456  78912  3456 S   5.0  0.9   0:10.23 nginx
 5678 user      20   0  234567  89012  4567 R   3.0  1.1   0:05.67 python

top命令的交互模式下,可以通过按键进行操作,例如按M按内存占用率排序,按P按CPU占用率排序,按k终止指定进程,按q退出toptop还支持自定义显示列和刷新间隔,例如top -d 5 -p 1234可以指定每5秒刷新一次,并只显示PID为1234的进程信息。

htoptop的增强版,提供了更友好的交互界面和更丰富的功能,与top相比,htop支持鼠标操作,可以用不同颜色区分不同类型的进程(如用户进程、系统进程),并且可以横向滚动查看完整的命令行。htop的默认界面分为几个区域:顶部是系统概览信息(CPU、内存、交换分区使用情况),中间是进程列表(默认按CPU占用率排序),底部是快捷键提示。

  1  [####.....]   12%   sys   45%   user   0%   nice   0%   idle  43%   iowait   0%   irq   0%   softirq
  2  [........]    5%   sys    8%   user   0%   nice   87%  idle   0%   iowait   0%   irq   0%   softirq
Mem[|||||||||||||||||||||||||||||||||||||||||||||||]   3.2/7.9GB
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
  PID      USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+   Command
 1234      root      20   0 120M  77M  34M S  5.0  0.9  10:23.23 nginx
 5678      user      20   0 230M  89M  45M R  3.0  1.1   5:67.67 python

htop还支持树形视图(按F5t键),可以直观地显示进程的父子关系,这对于分析复杂进程树非常有帮助。htop可以通过F2键进入设置菜单,自定义显示列、颜色主题和排序方式。

pgreppidof是两个用于根据名称或其他属性查找进程ID的工具。pgrep可以根据进程名、用户、终端等条件查找进程,并返回匹配的进程ID列表。pgrep nginx会返回所有nginx进程的PID,而pgrep -u root会查找所有属于root用户的进程。pidof则更简单,仅根据进程名返回PID,例如pidof nginx会返回nginx的主进程PID,这两个命令通常用于脚本中,因为它们可以直接输出进程ID,方便后续操作。

Linux显示进程命令有哪些?-图3
(图片来源网络,侵删)

pstree命令以树形结构显示进程的父子关系,可以清晰地展示进程的层次结构。pstree会显示init进程(PID为1)作为根节点,其子进程如systemd、kernel processes等,每个子进程下又有其子进程。pstree支持选项如-p显示进程ID,-u显示用户名,例如pstree -p会显示包含PID的进程树。

lsof(list open files)命令用于列出当前系统打开的文件,但也可以用来查看进程信息,因为Linux中一切皆文件,所以进程打开的文件包括普通文件、网络连接、设备文件等,通过lsof -i :80可以查看占用80端口的进程,lsof -p 1234可以查看PID为1234的进程打开的所有文件。lsof的输出包括PID、用户、FD(文件描述符)、TYPE(文件类型)、DEVICE、SIZE/OFF、NODE、NAME等信息,

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234 root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)
nginx   1234 root    7u  IPv6  12346      0t0  TCP [::]:http (LISTEN)

systemctl命令主要用于管理系统服务,但也可以通过systemctl status查看服务的进程信息。systemctl status nginx.service会显示nginx服务的状态、主进程PID、占用资源情况以及最近的日志条目,这对于管理systemd服务非常有用,特别是当服务出现问题时,可以通过systemctl status快速定位相关进程。

下面通过一个表格总结常用Linux进程显示命令的功能和特点:

命令 主要功能 常用选项 特点
ps 显示静态进程快照 -ef, -aux, -auxf, -eo 基础命令,适合快速查看特定进程
top 动态显示进程和系统资源 -d, -p, -c, -u 实时监控,支持交互操作
htop top的增强版,提供更友好的界面 -d, -p, -u, -t 支持鼠标操作,树形视图,自定义列
pgrep 根据条件查找进程ID -u, -l, -x, -f 适合脚本使用,支持灵活筛选条件
pidof 根据进程名查找PID 无(直接跟进程名) 简单直接,仅返回PID
pstree 以树形结构显示进程关系 -p, -u, -a 直观展示进程层次结构
lsof 列出进程打开的文件,包括网络连接 -i, -p, -u, -c 适合排查端口占用和文件句柄问题
systemctl 查看和管理systemd服务状态 status, list-units, show 适合systemd环境下的服务进程管理

在实际使用中,可以根据需求选择合适的命令,需要快速查看当前终端下的进程,使用ps;需要实时监控系统资源,使用tophtop;需要查找特定进程的PID,使用pgreppidof;需要分析进程的父子关系,使用pstree;需要排查端口占用问题,使用lsof,掌握这些命令的用法,可以大大提高Linux系统管理和开发的效率。

相关问答FAQs:

  1. 问:ps auxps -ef有什么区别?
    答:ps auxps -ef都是显示系统中所有进程的命令,但输出格式不同。ps aux采用BSD格式,包含USER、PID、%CPU、%MEM、VSZ、RSS、STAT、START、COMMAND等列,其中STAT列显示进程状态(如S、R、Z等);而ps -ef采用System V格式,包含UID、PID、PPID、C、STIME、TTY、TIME、CMD等列,其中PPID列显示父进程ID。ps aux更侧重于资源占用情况,而ps -ef更侧重于进程的父子关系。ps aux的输出可能被截断(如果命令行过长),而ps -ef会显示完整的命令行。

  2. 问:如何使用top命令找到并终止占用CPU最高的进程?
    答:使用top命令时,默认按CPU占用率降序排列,因此占用CPU最高的进程通常位于列表顶部,具体操作步骤如下:首先在终端输入top启动top命令;观察%CPU列,找到数值最高的进程;记下该进程的PID(第一列);按下k键,top会提示输入要终止的PID,输入对应的PID;接着提示输入信号编号,默认为15(TERM信号,正常终止),直接按回车键即可;如果进程无法正常终止,可以输入9(KILL信号,强制终止),但使用KILL信号可能导致进程无法清理资源,建议优先使用TERM信号,终止后,按q键退出top命令。

分享:
扫描分享到社交APP
上一篇
下一篇