RHCE认证学习笔记(五):进程管理与服务控制

大家好,欢迎回到RHCE9学习笔记系列。在前四篇文章中,我们学习了Linux基础操作、文件管理、命令组合以及用户权限。今天,我们将进入系统的“心脏”——进程管理与服务控制 。理解进程是如何运行的、如何监控和调整它们,以及如何使用systemd管理服务,是运维工程师的核心技能。
1. 什么是进程?
进程 就是运行中的程序。当你执行一条命令、启动一个服务或运行一个脚本时,系统会创建一个或多个进程来完成任务。每个进程至少占用CPU和内存资源,有些还会占用磁盘、网络等资源。
Linux中,第一个进程是 <span leaf="">systemd</span>(RHEL 7及以后)或 <span leaf="">init</span>(RHEL 6及以前)。它负责启动所有其他进程,是所有进程的“祖先进程”。<span leaf="">systemd</span>采用并行启动 方式,相比<span leaf="">init</span>的串行启动,大大加快了系统启动速度。
2. 查看进程 – <span leaf="">ps</span>
<span leaf="">ps</span> 命令用于显示当前系统中的进程快照。它是最常用的进程查看工具。
2.1 常用选项组合
| 选项 | 说明 |
|---|---|
<span leaf="">ps aux</span> | 显示所有用户的详细进程信息(BSD风格) |
<span leaf="">ps -ef</span> | 显示所有进程的完整信息(System V风格) |
<span leaf="">ps -u username</span> | 显示指定用户的进程 |
<span leaf="">ps -p PID</span> | 显示指定PID的进程 |
2.2 <span leaf="">ps aux</span> 输出解读
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.3 170708 13192 ? Ss 10:00 0:02 /usr/lib/systemd/systemd
| 字段 | 含义 |
|---|---|
| USER | 进程所有者 |
| PID | 进程ID |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小(KB) |
| RSS | 常驻内存大小(KB) |
| TTY | 关联的终端(<span leaf="">?</span> 表示无终端,如守护进程) |
| STAT | 进程状态(见下文) |
| START | 启动时间 |
| TIME | 累计CPU时间 |
| COMMAND | 命令(包含参数) |
2.3 进程状态(STAT)
| 状态码 | 含义 |
|---|---|
| R | 正在运行或可运行(runnable) |
| S | 可中断的睡眠(sleeping) |
| D | 不可中断的睡眠(通常在等待I/O) |
| T | 暂停(stopped) |
| Z | 僵尸进程(zombie) |
| + | 前台进程组中的进程 |
| s | 会话领导者 |
| < | 高优先级 |
| N | 低优先级 |
| l | 多线程进程 |
2.4 常用示例
# 查找特定进程(排除 grep 自身)ps aux | grep nginx | grep -v grep
# 查看进程树状结构ps auxf
# 只显示指定用户的进程ps -u zhangsan
3. 动态查看进程 – <span leaf="">top</span>
<span leaf="">top</span> 提供了实时更新的进程视图,是系统性能监控的利器。
3.1 基本使用
直接在终端输入 <span leaf="">top</span> 进入交互界面,按 <span leaf="">q</span> 退出。
3.2 界面解读
上半部分显示系统摘要:
- 第一行 :系统时间、运行时间、登录用户数、系统平均负载(1/5/15分钟)
- 第二行 :进程总数、运行中、睡眠、停止、僵尸
- 第三行 :CPU使用率(us用户、sy系统、ni nice、id空闲、wa等待I/O、hi硬中断、si软中断、st被偷取)
- 第四、五行 :物理内存和交换分区使用情况
下半部分列出进程详情,类似 <span leaf="">ps</span>。
3.3 常用交互命令
| 按键 | 作用 |
|---|---|
<span leaf="">1</span> | 显示每个CPU核心的使用情况 |
<span leaf="">P</span> | 按CPU使用率排序(默认) |
<span leaf="">M</span> | 按内存使用率排序 |
<span leaf="">T</span> | 按累计CPU时间排序 |
<span leaf="">k</span> | 终止进程(输入PID后输入信号,如15或9) |
<span leaf="">r</span> | 调整进程优先级(renice) |
<span leaf="">u</span> | 只显示指定用户的进程 |
<span leaf="">h</span> | 显示帮助 |
<span leaf="">q</span> | 退出 |
3.4 命令行参数
top -d 2 # 每2秒刷新一次top -n 5 # 刷新5次后退出top -b -n 1 > top.log # 以批处理模式输出到文件(适合脚本)
4. 进程树 – <span leaf="">pstree</span>
<span leaf="">pstree</span> 以树形结构显示进程间的父子关系,清晰地展示进程的层级。
pstree -p # 显示PIDpstree -u # 显示用户pstree -a # 显示完整命令参数
输出示例:
systemd(1)─┬─NetworkManager(921)─┬─{NetworkManager}(1073) │ └─{NetworkManager}(1074) ├─sshd(1050)───sshd(1234)───bash(1235) └─crond(1140)
5. 终止进程 – <span leaf="">kill</span>
<span leaf="">kill</span> 命令通过发送信号来控制进程。
5.1 常用信号
| 信号编号 | 名称 | 含义 |
|---|---|---|
| 1 | SIGHUP | 重新加载配置(不中断服务) |
| 9 | SIGKILL | 强制杀死(进程无法捕获) |
| 15 | SIGTERM | 正常终止(默认,进程可清理后退出) |
| 18 | SIGCONT | 继续运行(从停止状态恢复) |
| 19 | SIGSTOP | 停止进程 |
5.2 使用示例
kill PID # 发送默认信号15,正常终止kill -9 PID # 强制杀死kill -1 PID # 让进程重新加载配置(常用于Nginx等)
# 杀死某个用户的所有进程pkill -u username # 按用户名杀进程pkill -t pts/0 # 杀死指定终端的所有进程
# 按名称杀进程(小心误杀)killall nginx
6. 作业调度
当你在终端中运行命令时,该命令是前台进程 。你可以将任务放到后台 运行,让终端继续执行其他命令。
6.1 后台运行
# 在命令末尾加 &,直接放到后台sleep 100 &
# 正在运行的前台进程,按 Ctrl+Z 暂停并放到后台# 然后可以用 bg 让它继续在后台运行bg %1
# 将后台任务调回前台fg %1
6.2 查看后台任务 – <span leaf="">jobs</span>
jobs # 列出当前Shell中的后台任务jobs -l # 同时显示PID
输出示例:
[1]- Running sleep 100 &[2]+ Stopped vim largefile.txt
<span leaf="">+</span>表示当前默认任务,<span leaf="">-</span>表示下一个默认任务- 可以用
<span leaf="">fg %2</span>或<span leaf="">bg %2</span>操作指定任务
6.3 注意事项
- 后台任务仍与当前Shell关联,关闭Shell会导致后台任务结束。
- 想让任务在退出Shell后继续运行,可使用
<span leaf="">nohup</span>或<span leaf="">disown</span>:
nohup long_task & # 忽略挂断信号disown %1 # 从Shell的作业表中移除
7. 进程优先级 – <span leaf="">nice</span> 与 <span leaf="">renice</span>
Linux使用优先级调度CPU资源,数值越小优先级越高(普通用户范围0~19,root可调-20~19)。
7.1 查看优先级
在 <span leaf="">top</span> 中 <span leaf="">NI</span> 列即为nice值。
7.2 启动时设置优先级
nice -n 10 tar -czf backup.tar.gz /home # 降低优先级nice -n -5 ./urgent_task # 提高优先级(需root)
7.3 修改运行中进程的优先级
renice 5 -p 1234 # 将PID为1234的进程nice设为5renice 10 -u zhangsan # 将用户所有进程nice设为10
8. systemd 服务管理
从RHEL 7开始,<span leaf="">systemd</span> 成为系统和服务管理器,替代了传统的 <span leaf="">init</span> 系统。<span leaf="">systemd</span> 管理的单元(unit)不仅包括服务(<span leaf="">.service</span>),还包括挂载点(<span leaf="">.mount</span>)、套接字(<span leaf="">.socket</span>)、目标(<span leaf="">.target</span>)等。
8.1 查看单元
systemctl list-units # 列出所有活动单元systemctl list-unit-files # 列出所有单元文件及启用状态systemctl list-units --type=service # 只列出服务
8.2 服务基本操作
systemctl start httpd # 启动服务systemctl stop httpd # 停止服务systemctl restart httpd # 重启服务systemctl reload httpd # 重新加载配置(不中断服务)systemctl status httpd # 查看状态systemctl enable httpd # 设置开机自启systemctl disable httpd # 取消开机自启systemctl is-active httpd # 检查是否运行systemctl is-enabled httpd # 检查是否开机自启
8.3 查看服务日志
journalctl -u httpd # 查看httpd服务的日志journalctl -u httpd -f # 实时跟踪日志(类似tail -f)journalctl -u httpd -n 20 # 显示最近20行journalctl -u httpd --since today
8.4 运行级别与目标(target)
<span leaf="">systemd</span> 用目标(target)替代了传统的运行级别:
| 传统级别 | 对应的 target |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 3 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
查看和切换:
systemctl get-default # 查看默认targetsystemctl set-default multi-user.target # 设为命令行模式systemctl isolate graphical.target # 立即切换(临时)
9. 实战:编写一个简单服务单元
假设我们有一个脚本 <span leaf="">/opt/myapp/start.sh</span>,希望将其作为系统服务管理。
1.创建服务单元文件 <span leaf="">/etc/systemd/system/myapp.service</span>:
[Unit]Description=My Application ServiceAfter=network.target
[Service]Type=simpleExecStart=/opt/myapp/start.shRestart=on-failureUser=myappGroup=myapp
[Install]WantedBy=multi-user.target
2.重新加载systemd配置 :
systemctl daemon-reload
3.启动并设置开机自启 :
systemctl start myappsystemctl enable myapp
4.查看状态 :
systemctl status myapp
总结
本篇我们学习了Linux进程管理的核心内容:
- 进程查看 :
<span leaf="">ps</span>、<span leaf="">top</span>、<span leaf="">pstree</span>分别提供静态快照、动态监控和树形结构。 - 进程控制 :用
<span leaf="">kill</span>发送信号终止或控制进程。 - 作业调度 :通过
<span leaf="">&</span>、<span leaf="">Ctrl+Z</span>、<span leaf="">bg</span>、<span leaf="">fg</span>、<span leaf="">jobs</span>管理前后台任务。 - 优先级调整 :
<span leaf="">nice</span>和<span leaf="">renice</span>影响CPU调度。 - 服务管理 :
<span leaf="">systemctl</span>统一管理系统服务、目标和日志。
掌握这些工具,你就能轻松监控系统资源、管理后台任务、确保关键服务稳定运行。下一篇,我们将进入软件包管理 ,学习如何在RHEL系统中安装、升级和删除软件,以及如何搭建本地软件仓库。敬请期待!
练习建议 :
- 运行一个消耗CPU的测试程序(如
<span leaf="">dd if=/dev/zero of=/dev/null &</span>),观察<span leaf="">top</span>中的CPU使用率变化。 - 使用
<span leaf="">pstree -p</span>查看systemd的子进程,理解进程树。 - 创建一个简单的自定义服务,确保它能在开机时自动启动。
- 尝试使用
<span leaf="">nice</span>启动一个任务,并用<span leaf="">renice</span>调整其优先级,观察<span leaf="">top</span>中的变化。
标题:RHCE认证学习笔记(五):进程管理与服务控制
作者:shuaiqijun
地址:https://www.shuaiqijun.com/articles/2026/03/26/1774504547416.html