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

  |   0 评论   |   0 浏览

大家好,欢迎回到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
%CPUCPU使用率
%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 常用信号

信号编号名称含义
1SIGHUP重新加载配置(不中断服务)
9SIGKILL强制杀死(进程无法捕获)
15SIGTERM正常终止(默认,进程可清理后退出)
18SIGCONT继续运行(从停止状态恢复)
19SIGSTOP停止进程

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
0poweroff.target
1rescue.target
3multi-user.target
5graphical.target
6reboot.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系统中安装、升级和删除软件,以及如何搭建本地软件仓库。敬请期待!


练习建议

  1. 运行一个消耗CPU的测试程序(如 <span leaf="">dd if=/dev/zero of=/dev/null &</span>),观察 <span leaf="">top</span> 中的CPU使用率变化。
  2. 使用 <span leaf="">pstree -p</span> 查看systemd的子进程,理解进程树。
  3. 创建一个简单的自定义服务,确保它能在开机时自动启动。
  4. 尝试使用 <span leaf="">nice</span> 启动一个任务,并用 <span leaf="">renice</span> 调整其优先级,观察 <span leaf="">top</span> 中的变化。

标题:RHCE认证学习笔记(五):进程管理与服务控制
作者:shuaiqijun
地址:https://www.shuaiqijun.com/articles/2026/03/26/1774504547416.html