目录
systemd 是 Linux 系统中的 1 号进程,是所有用户进程的父进程,负责系统初始化、服务管理、资源管理等功能,支持服务并行启动,并通过 systemctl 工具提供统一的系统与服务管理接口。
一、进程管理:从 systemd 开始
1. 理解 systemd:系统的 “总管家”
在 RHEL9 中,PID 为 1 的进程是 systemd,它是所有用户进程的 “父进程”,也是系统初始化和服务管理的核心。
并行启动:相比传统的 SysVinit,systemd 支持服务并行启动,大大缩短了系统启动时间。
统一管理:通过 systemctl 命令,我们可以统一管理所有系统服务,无论是启动、停止、重启还是查看状态。
功能整合:它整合了系统初始化、服务管理、设备管理、挂载点管理、定时任务等多种功能,是现代 Linux 系统的基石。
2. 进程查看:ps vs top
在排查系统负载或资源占用时,我们经常需要查看进程信息。ps 和 top 是两个最常用的工具,但它们的侧重点不同。
| 命令 | 特点 | 适用场景 |
|---|---|---|
ps | 静态快照,一次性输出当前时刻的进程列表 | 需要查看某一时刻的进程状态,或进行脚本分析时 |
top | 动态实时监控,默认每 5 秒刷新一次 | 需要持续观察系统负载、进程资源消耗变化时 |
实战命令:ps aux 与 ps -ef
ps aux :
清晰展示每个进程的 CPU、内存使用率(%CPU, %MEM)。
适合快速定位资源消耗大户。
示例:ps aux | grep firefox
ps -ef :
清晰展示进程的父进程 ID(PPID)。
适合追踪进程的衍生关系,排查 “谁启动了这个进程”。
示例:ps -ef | grep nginx
这两个命令是 ps 最常用的变体,但输出格式和侧重点不同:
3. 进程状态:读懂 STAT 列
进程在其生命周期中会处于不同的状态,理解这些状态是排查问题的关键:
R (Running/Runnable):正在 CPU 上运行,或在就绪队列中等待运行。
S (Sleeping):可中断睡眠,等待某个事件(如 I/O 完成),可以被信号唤醒。
D (Uninterruptible Sleep):不可中断睡眠,通常在等待硬件 I/O,无法被信号唤醒,ps 中显示为 D。
I (Idle):空闲状态,是 D 状态的子集,系统计算负载时会忽略这类进程。
T (Stopped):已停止,通常是被 Ctrl+Z 或 SIGSTOP 信号暂停。
Z (Zombie):僵尸进程,子进程已退出,但父进程未读取其退出状态,资源未完全释放。
4. 作业控制:Shell 层面的进程管理
作业(Job)是 Shell 层面的概念,它将一个或多个进程(如一条命令、一个管道或一个脚本)逻辑上分组。内核只识别进程,而作业控制是 Shell 提供的功能。
后台运行:在命令后加 &,如 sleep 10000 &,Shell 会返回作业编号和 PID。
查看作业:使用 jobs 命令查看当前 Shell 会话中的所有作业。
前后台切换:fg %1:将作业 1 切换到前台。
bg %1:将作业 1 在后台继续运行。
Ctrl+Z:将当前前台作业暂停并放到后台。
5. 进程终止:kill 命令的艺术
终止进程时,我们通常使用 kill 命令,它通过发送信号来控制进程。其中,SIGTERM (15) 和 SIGKILL (9) 是最常用的两个信号。
kill -15 <PID> (SIGTERM):这是优雅终止信号,也是 kill 命令的默认信号。它通知进程 “请正常退出”,进程可以捕获这个信号,执行清理工作(如保存数据、关闭连接)后再退出。
kill -9 <PID> (SIGKILL):这是强制终止信号,无法被进程捕获、阻塞或忽略。内核会立即终止进程,不会给进程任何清理的机会,可能导致数据损坏或资源泄漏。仅在 SIGTERM 无效时才使用。
此外,还有 pkill(按名称终止)、killall(按名称终止所有匹配进程)等工具,以及 pgrep(仅列出 PID 而不终止)来辅助操作。

520

被折叠的 条评论
为什么被折叠?



