Linux 命令实战 · 第 6 章 进程、作业与性能观测


文档摘要

Linux 命令实战 · 第 6 章 进程、作业与性能观测 章节摘要:到这一章,我们把视角从「文件」转到「正在运行的程序」——进程。本章要把三件事讲透。第一是进程状态机:一个进程从「运行」到「就绪」到「睡眠」到「僵尸」的生命周期,理解了它,你才能读懂 / 输出里那一列 ,也才能理解「为什么 后进程有时还在」。第二是信号: 不是「杀死」,而是「发信号」——SIGTERM 是请求、SIGKILL 是强杀、SIGHUP 是重载,理解信号,你才懂得优雅退出与强制终止的差别。第三是文件描述符:每个进程打开的文件都是一个整数句柄, 能告诉你「端口被谁占了、文件被谁锁了」。这三件事合起来,就是排查「服务起不来、端口被占、CPU 跑满、僵尸进程堆积」这类生产问题的全套工具。

Linux 命令实战 · 第 6 章 进程、作业与性能观测

章节摘要:到这一章,我们把视角从「文件」转到「正在运行的程序」——进程。本章要把三件事讲透。第一是进程状态机:一个进程从「运行」到「就绪」到「睡眠」到「僵尸」的生命周期,理解了它,你才能读懂 ps/top 输出里那一列 STAT,也才能理解「为什么 kill 后进程有时还在」。第二是信号:kill 不是「杀死」,而是「发信号」——SIGTERM 是请求、SIGKILL 是强杀、SIGHUP 是重载,理解信号,你才懂得优雅退出与强制终止的差别。第三是文件描述符:每个进程打开的文件都是一个整数句柄,lsof 能告诉你「端口被谁占了、文件被谁锁了」。这三件事合起来,就是排查「服务起不来、端口被占、CPU 跑满、僵尸进程堆积」这类生产问题的全套工具。读完本章,你不再是「kill -9 一把梭」,而是能精准诊断每个进程在做什么。

学习目标

阅读完本章,你应当能够:

  1. 读懂 ps auxps -ef 两套输出,理解 BSD 风格(无横杠)与 System V 风格(带横杠)的差异。
  2. 解读 top/htop 的输出,重点理解 %CPU%MEMSTAT(R/S/D/Z/T)各列含义。
  3. 说清进程状态的完整生命周期(运行/就绪/睡眠/不可中断睡眠/停止/僵尸),并解释「僵尸进程」是怎么产生的。
  4. kill/killall/pkill 发送信号,区分 SIGTERM(请求退出)、SIGKILL(强制)、SIGHUP(重载),理解为什么优先用 SIGTERM。
  5. jobs/bg/fg/nohup/& 管理后台作业,理解 nohup 解决的是「终端关闭导致 SIGHUP」问题。
  6. freeuptimevmstat 观测系统整体资源,区分「实际内存」与「含缓冲/缓存的占用」。
  7. lsof 排查「端口被谁占、文件被谁锁」,理解文件描述符(fd)是进程与资源之间的句柄。
  8. strace 追踪进程的系统调用,定位「卡在哪一步」的疑难问题。

核心概念速览

进程排查的三大坐标:它在什么状态(STAT)、它收到了什么信号(信号)、它打开了什么资源(fd)。三者合起来,几乎能解释所有「进程行为异常」的问题。

子章节导航

01 看进程:ps 两套风格

ps aux(BSD 风格,无横杠)与 ps -ef(System V 风格,带横杠)的差异,以及 ps -eLf(看线程)、ps aux --sort=-%cpu 按字段排序。重点解读 STAT 列的每个字母。

02 实时观测:tophtop

top 是终端里的「任务管理器」。讲清它的分区(系统负载概览 + 进程列表)、%CPU/%MEM/STAT/TIME+ 各列含义、交互键(P 按 CPU 排序、M 按内存、k 杀进程、1 看每核)。htop 作为更友好的升级版。

03 进程状态机与僵尸进程

进程的完整生命周期:运行(R)、睡眠(S)、不可中断睡眠(D)、停止(T)、僵尸(Z)。重点讲「僵尸进程」是怎么产生的(子进程结束但父进程没回收)以及它为什么占资源少却危险。

04 信号与终止:killkillallpkill

kill 不是「杀」,而是「发信号」。讲清常用信号(SIGTERM=15 默认、SIGKILL=9 强杀、SIGHUP=1 重载、SIGINT=2 Ctrl+C),为什么优先 SIGTERM(给程序清理机会),以及 killall/pkill 按名匹配的便利与风险。

05 后台作业:jobsbgfgnohup&

& 放后台、Ctrl+Z 暂停、bg/fg 切前后台、jobs 看作业表。重点讲 nohup 解决的是「终端关闭时 Shell 给所有子进程发 SIGHUP」的问题,以及为什么生产环境应该用 systemd 而非 nohup

06 系统资源:freeuptimevmstat

free -h 看内存(区分 used/free/buff/cache,强调「可用」要看 avail)、uptime 看负载均衡(三个数字=1/5/15 分钟平均负载)、vmstat 看虚拟内存与上下文切换。

07 资源归属排查:lsof

lsof 是「谁占着资源」的万能工具。三个高频用法:lsof -i :80(端口被谁占)、lsof +D /path(目录被谁锁)、lsof -p PID(某进程打开了什么)。讲清文件描述符是这一切的基础。

08 系统调用追踪:straceltrace

strace 是「最后救命」的排查工具:它打印进程的每个系统调用。讲清 -p PID(挂到运行中进程)、-e trace=open,read(过滤)、-f(跟踪子进程),以及用它定位「程序卡在读哪个文件」的经典场景。

子章节之间的逻辑关系

本章遵循「看 → 读懂状态 → 终止 → 后台 → 系统观测 → 归属排查 → 深度追踪」的递进路径:

ps (01) ── 先"拍快照"看有哪些进程 │ ▼ top/htop (02) ── 再"实时看" │ ▼ 进程状态机 (03) ── 读懂 STAT, 理解僵尸 │ ▼ kill/信号 (04) ── 知道怎么终止它 │ ▼ jobs/nohup (05) ── 知道怎么把它放后台 │ ▼ free/uptime (06) ── 抬到系统级资源观测 │ ▼ lsof (07) ── 排查"端口/文件被谁占" │ ▼ strace (08) ── 最后救命:看每个系统调用 │ ▼ 第 7 章:从"本机进程"延伸到"网络连通"

前三节是「看见与读懂」,中间两节(04-05)是「控制」,后三节(06-08)是「观测与深度排查」。strace(08)是难度最高的工具,但也是「所有常规手段都失败时」的终极武器。lsof(07)与 strace(08)共同依赖「文件描述符」这个底层概念。

前置知识与后续延伸

前置知识:

  • 第 1 章(标准流——0/1/2 即进程的三个标准 fd)
  • 第 2 章(i 节点、文件——进程打开的就是文件的 fd)
  • 第 5 章(权限——进程以哪个用户身份运行,决定它能访问什么)

本章为后续章节奠定的基础:

  • 进程与信号是第 8 章(systemctl stop/restart 本质就是发信号)的基础
  • lsof -i :80 是第 7 章(网络)里排查端口问题的标准手段
  • 文件描述符概念延伸到第 7 章(套接字也是一种 fd)
  • 「僵尸进程」「SIGTERM vs SIGKILL」的认知是生产运维的必备常识

发布者: 作者: 灏天文库 转发
评论区 (0)
U