Linux教程(三)进程相关命令

226 阅读4分钟

在 Linux 中存在很多命令,这篇文章将介绍 Linux 进程相关的命令,如下图所示:

屏幕截图 2025-06-28 203749.png

查看进程状态命令

ps

ps 命令作用是显示系统中进程的信息。ps 命令的常用选项为:

  • -ef 以标准格式显示所有进程(e 显示所有进程,f 显示完整格式)
  • -u 指定用户的所有进程
  • -p <PID> 查看指定 pid 的进程信息

代码示例如下:

# 查看所有进程的完整信息
ps -ef

# 查看用户 root 的所有进程
ps -u root -f

# 我们可以使用 | grep 来过滤无用的消息
ps -u root -f | grep nginx

ps -ef 的输出示例如下所示:

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jun28 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Jun28 ?        00:00:00 [kthreadd]
root         3     2  0 Jun28 ?        00:00:00 [rcu_gp]
root         4     2  0 Jun28 ?        00:00:00 [rcu_par_gp]
...
user1     1234  1230  0 14:30 pts/0    00:00:00 bash
user1     2345  1234  0 14:31 pts/0    00:00:00 ps -ef

其中:

  • UID:是用户的id
  • PID:是进程id,进程的唯一标识
  • PPID:是父进程的PID
  • C:当前进程占用CPU的程度(百分比)
  • STIME:进程启动时间
  • TTY:表示进程关联的终端设备,比如 pts/0 表示伪终端(通过 SSH 或终端模拟器连接),?表示无终端关联,ttyn 物理终端(如直接连接显示器的控制台)
  • TIME:表示进程累计使用CPU的时间
  • CMD:启动进程的完整命令行(包含参数)

pstree

pstree 命令,将所有进程以树状图显示。代码示例如下:

# 显示所有进程的树状结构
pstree

# 显示包含 PID 的树状结构
pstree -p

# 显示用户 "nginx" 的进程树
pstree -u nginx

top

top 命令会实时显示系统中各进程的资源占用情况。top 的常用选项有:

  • -d <秒数>:指定 top 命令的刷新时间间隔,单位为秒。
  • -n <次数>:指定 top 命令运行的次数后自动退出。
  • -p <进程ID>:仅显示指定进程ID的信息。
  • -u <用户名>:仅显示指定用户名的进程信息。
  • -H:在进程信息中显示线程详细信息。
  • -i:不显示闲置(idle)或无用的进程。
  • -b:以批处理(batch)模式运行,直接将结果输出到文件。
  • -S:累计显示进程的 CPU 使用时间。

使用 top 命令打印的信息如下:

# 系统负载信息
top - 14:30:25 up 1 day, 23:50,  2 users,  load average: 0.51, 0.62, 0.73

# 进程统计信息
Tasks: 234 total,   1 running, 233 sleeping,   0 stopped,   0 zombie

# CPU 使用率
%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

# 内存信息
MiB Mem :  3949.1 total,   762.5 free,  2012.1 used,  1174.5 buff/cache
MiB Swap:  2048.0 total,  2048.0 free,     0.0 used.  1744.1 avail Mem 

# 进程列表区
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  1024M   512M   128M S   5.0   6.4   1:23.45 python3
 5678 www-data  20   0   896M   384M    96M S   2.3   4.8   0:45.67 nginx

对于 系统负载信息,各种字段的作用如下:

  • up 1 day, 23:50:系统已运行时间。
  • 2 users:当前登录用户数。
  • load average: 0.51, 0.62, 0.73:系统负载平均值(1 分钟、5 分钟、15 分钟),反映 CPU 繁忙程度。

对于 进程统计信息,各种字段的作用如下:

  • Tasks: 234 total:总进程数。
  • 1 running:正在运行的进程数。
  • 233 sleeping:睡眠状态的进程数。
  • 0 stopped:停止的进程数。
  • 0 zombie:僵尸进程数(若不为 0 需排查)。

对于CPU 使用率,各种字段的作用如下:

  • us(user):用户空间进程占用 CPU 百分比。
  • sy(system):内核空间占用 CPU 百分比。
  • ni(nice):低优先级(nice 值为正)进程占用 CPU 百分比。
  • id(idle):CPU 空闲百分比。
  • wa(wait):等待 I/O 完成的 CPU 时间百分比。
  • hi(hardware IRQ):处理硬件中断的 CPU 时间百分比。
  • si(software IRQ):处理软件中断的 CPU 时间百分比。
  • st(steal time):被虚拟机偷走的 CPU 时间百分比(虚拟化环境)。

对于内存信息,各种字段的作用如下:

  • total:总内存(物理内存或交换空间)。
  • free:空闲内存。
  • used:已使用内存(不包含缓存)。
  • buff/cache:用于缓冲和缓存的内存。
  • avail Mem:实际可用内存(可快速回收的缓存 + 空闲内存)。

对于进程列表区各种字段的作用如下:

字段全称作用描述
PIDProcess ID进程 ID,用于标识和操作进程(如 kill PID)。
USERUser进程所有者的用户名。
PRPriority进程优先级(数值越低优先级越高,默认 20)。
NINice Value进程的 nice 值(范围 -20 ~ 19,负值表示高优先级)。
VIRTVirtual Memory进程使用的虚拟内存总量(包括未加载到物理内存的部分)。
RESResident Mem进程实际占用的物理内存(驻留内存)。
SHRShared Mem进程共享的内存(如共享库)。
SStatus进程状态:
- S:睡眠(可中断)
- D:不可中断睡眠
- R:运行中
- T:暂停(通过 Ctrl+Zkill -TSTP
- Z:僵尸进程
- X:死亡进程
%CPUCPU Usage进程占用 CPU 的百分比(实时更新)。
%MEMMemory Usage进程占用物理内存的百分比。
TIME+CPU Time进程累计使用 CPU 的时间(精确到 0.01 秒)。
COMMANDCommand Line启动进程的命令行(可能截断,按 c 键可切换完整/简略模式)。

使用 top 命令后,我们还可以使用交互命令(启动 top 后可用),如下表所示:

按键功能
P按 CPU 使用率排序(默认)。
M按内存使用率排序。
T按累计 CPU 时间排序。
k输入 PID 后按 Enter,可向进程发送信号(默认 SIGTERM,按 9 发送 SIGKILL)。
r输入 PID 后按 Enter,可修改进程的 nice 值(调整优先级)。
q退出 top
h显示帮助信息。
1切换显示每个 CPU 的详细信息(多核系统)。
u输入用户名,筛选显示特定用户的进程。

lsof

lsof 命令作用是列出当前系统打开的所有文件及相关进程信息。在 Linux 中,"一切皆文件"的理念意味着 lsof 不仅能显示常规文件,还能显示网络连接、设备文件、管道和套接字等。

# 列出所有打开的文件
lsof
# 查看 PID 为 1234 的进程打开的文件
lsof -p 1234  
# 查看所有 nginx 进程打开的文件
lsof -c nginx 
# 查看 root 用户打开的文件
lsof -u root  

lsof 命令输出的信息如下所示:

$ lsof /var/log/syslog
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
rsyslogd  876    root    6w   REG  8,1    123456     1234 /var/log/syslog

各个字段的作用如下:

  • COMMAND:进程名称
  • PID:进程 ID
  • USER:运行进程的用户
  • FD:文件描述符
    • cwd:当前工作目录
    • txt:程序代码文件
    • mem:内存映射文件
    • 0u1u2u:标准输入、输出、错误(u 表示读写,r 表示只读,w 表示只写) 这里 6w,表示文件描述符为6以写模式(w)打开
  • TYPE:文件类型(REG 常规文件,DIR 目录,CHR 字符设备等)
  • DEVICE:设备号
  • SIZE/OFF:文件大小或偏移量
  • NODE:文件 inode 号
  • NAME:文件名或挂载点

pgrep

pgrep 命令用于查找进程。pgrep 的常用选项有:

  • -l 同时显示进程名和 PID
  • -a 显示完整命令行而不仅是进程名
  • -u 只匹配指定用户拥有的进程
  • -f 匹配完整命令行(包括参数)而不仅是进程名
  • -x 精确匹配整个进程名

示例如下所示:

# 查找用户 root 的所有进程的 PID
pgrep -u root
# 精确匹配进程名 sshd
pgrep -x sshd

进程优先级相关命令

nice

nice 命令用于启动进程时,设置优先级。在 Linux 中 nice 的范围从 -20 到 19,值越小优先级越高,抢占资源就越多。在 top 命令显示的 NI 列中就是 nice 的值。示例如下所示:

# 将shell脚本的 nice 值设为 10
nice -n 10 ./hello.sh  

renice

renice 命令用于修改已经运行进程的优先级。示例如下:

# 将用户 mysql 的所有进程 nice 值设为 -2
sudo renice -2 -u mysql  
# 将进程组 ID 为 5000 的所有进程 nice 值设为 10
sudo renice 10 -g 5000 

进程管理相关命令

这里以一个往文件循环添加 hello world 的 hello.sh 脚本为例来介绍进程管理的相关命令。

#!/bin/bash

# 创建临时文件
TEM_FILE="tem"
touch "$TEM_FILE"

# 每1秒向文件添加hello world
while true; do
    echo "hello world" >> "$TEM_FILE"
    sleep 1
done     

创建完脚本后,需要执行如下命令,给脚本添加执行权限。

chmod u+x hello.sh

&

& 的作用是让进程后台执行。示例如下:

# 后台执行脚本,会返回后台进程的pid
./hello.sh &
# 监听 tem 文件,看是否一直在往 tem 文件中添加内容
tail tem -f

jobs

jobs 命令会列出当前终端中所有作业的状态。常用的选项如下:

  • -l:显示作业的 PID。
  • -p:仅显示 PID。
  • -r:仅显示运行中的作业。
  • -s:仅显示暂停的作业。

示例如下所示:

# 查看作业列表
jobs -l
# 输出为:
# [1]+  8774 运行中               ./hello.sh &

fg

fg 命令的作用是将指定的后台作业(或暂停的作业)恢复到前台运行。示例如下:

fg             # 恢复最近的作业到前台

# 将作业恢复到前台
fg %1  # 这里的 1 是 ./hello.sh 任务的编号

bg

bg 命令的作用是将暂停的作业放到后台,并恢复其运行状态。示例如下

# 启动一个作业并暂停(按 Ctrl+Z)
top
# 输出:[1]+  Stopped                 top

# 将作业放到后台继续运行
bg %1
# 输出:[1]+ top &

Ctrl+Z是暂停进程,Ctrl+C是杀死进程

screen

具体看终端命令神器--Screen命令详解。助力Unix/Linux使用和管理 - 知乎

停止进程的相关命令

kill

kill 命令用于终止进程。示例如下:

# 发送 SIGKILL 信号(9)
kill -9 12345  # 终止 PID 为 12345 的进程
kill -STOP 1234  # 暂停 PID 为 1234 的进程
kill -CONT 1234  # 恢复 PID 为 1234 的进程

pkill

pkill 指令是按条件终止进程。常用选项如下:

  • -f:按完整命令行匹配(不仅限于进程名)。
  • -u <用户名>:按用户终止进程。
  • -t <终端>:按终端关联终止进程。
  • -signal:指定信号(如 -9 表示 SIGKILL)。

示例如下:

pkill firefox  # 终止所有名为 "firefox" 的进程
pkill -f "python app.py"  # 终止包含 "python app.py" 的进程
pkill -u www-data  # 终止用户 "www-data" 的所有进程
pkill -t pts/0  # 终止与 pts/0 终端关联的所有进程

参考