管理进程与服务
2026/9/3 5:02:19 网站建设 项目流程

本章重点

  • 进程静态/动态查看,进程树;进程前台后台切换、挂起、终止。
  • Systemd 单元、systemctl全套操作,服务开机自启配置。
  • Target 运行级别临时、永久切换。
  • at 一次性任务:编辑、查询、删除。
  • crontab 五段时间语法,案例配置、常见排错。

7.1 Linux 系统引导与进程基础

7.1.1 Linux 系统引导完整流程

下面用 ASCII 流程图展示从 BIOS/UEFI 到 GRUB2、内核、systemd 的完整引导流程,并标注每一步的关键输出或失败点:

┌─────────────────────────────────────────────────────────────────────┐ │ Linux 系统引导完整流程 │ └─────────────────────────────────────────────────────────────────────┘ [1] 上电 │ ▼ ┌──────────────────────────────┐ │ POST 开机自检 │ │ BIOS/UEFI 检测 CPU/内存/硬盘 │ │ 关键输出:硬件自检通过 │ │ 失败点:硬件故障 → 主板蜂鸣报警 │ └──────────────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ MBR / ESP 分区引导 │ │ BIOS 模式:读 MBR 主引导记录 │ │ UEFI 模式:读 ESP EFI 分区 │ │ 关键输出:找到引导程序 │ │ 失败点:MBR 损坏 → 找不到启动设备│ └──────────────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ GRUB2 引导 │ │ 选择内核版本,加载 vmlinuz │ │ 加载 initramfs 驱动镜像 │ │ 关键输出:内核镜像加载完成 │ │ 失败点:内核镜像缺失 → 引导失败 │ └──────────────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ 内核初始化 │ │ 识别硬件,挂载根文件系统 / │ │ 关键输出:根文件系统挂载成功 │ │ 失败点:根分区损坏 → 内核 panic │ └──────────────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ systemd (PID=1) 初始化 │ │ 根据 Target 启动各类系统服务 │ │ 关键输出:登录界面出现 │ │ 失败点:PID=1 崩溃 → 系统崩溃 │ └──────────────────────────────┘ │ ▼ 登录界面

个人理解:机器上电到登录界面一整套流水线,每一步失败都会导致开不了机。BIOS/UEFI→GRUB2→内核→systemd (PID=1)。

  1. POST 开机自检:BIOS/UEFI 检测 CPU、内存、硬盘硬件;根据启动顺序移交控制权。硬件故障会主板蜂鸣报警。
  2. MBR / ESP 分区引导
    • BIOS 模式:读取硬盘 MBR 主引导记录,交给 GRUB2 引导程序。MBR 损坏会报找不到启动设备。
    • UEFI 模式:读取 ESP EFI 系统分区,加载 GRUB2,支持大硬盘、安全启动。
  3. GRUB2 引导:选择内核版本,加载vmlinuz内核镜像、initramfs驱动镜像,把权限交给 Linux 内核。
  4. 内核初始化:识别硬件,挂载根文件系统/,启动systemd
  5. systemd (PID=1) 初始化PID=1 是所有进程的始祖进程,不能 kill,杀掉直接系统崩溃。根据 Target 目标启动各类系统服务,最后给到登录界面。

7.1.2 Systemd 核心体系与进程标识

  1. PID、PPID
    • PID:进程唯一数字 ID,操作进程靠 PID。
    • PPID:父进程 ID,进程由父进程 fork 创建。
    • 孤儿进程:父进程提前退出,子进程会被 PID=1 的 systemd 收养。
  2. Systemd Unit 单元systemd 把系统资源抽象成不同单元,配置文件存放两处:
  • /usr/lib/systemd/system:系统自带单元,不要手动改
  • /etc/systemd/system:管理员自定义单元,优先级更高

表格

单元类型后缀作用示例
Service.service管理后台服务进程sshd.service
Socket.socket进程间通信套接字sshd.socket
Mount.mount管理挂载点/home.mount
Target.target一组单元集合,代表系统运行状态multi‑user.target
Timer.timer定时器单元,替代 cronchronyd.timer
  1. Target 和传统运行级别对应

个人理解:Target 就是 Systemd 新版 “运行级别”,兼容老 SysVinit 数字级别。

表格

传统级别systemd target含义
0poweroff.target关机
1rescue.target单用户救援模式,排错
2/3/4multi‑user.target字符多用户(服务器生产环境,无图形)
5graphical.target图形桌面模式
6reboot.target重启

7.1.3 进程查看:静态快照与动态监控

  1. ps:静态快照,某一瞬间进程状态,不会自动刷新
  • ps auxBSD 风格,看用户、CPU、内存 PID;经常搭配管道|grep 进程名
  • ps -elfSystemV 风格,会显示 PPID 父进程,适合分析进程父子关系

ps aux关键字段:

表格

字段说明排错关注点
USER哪个用户启动进程排查异常非法进程
PID进程 IDkill 操作的标识
%CPUCPU 占用百分比查 CPU 飙高进程
%MEM内存占比内存泄漏
RSS实际物理内存 KB真实占用内存
TTY终端?代表后台守护进程无终端;pts 远程 ssh 终端
STAT进程状态R 运行,S 休眠,Z 僵尸进程Z 僵尸进程要处理
COMMAND启动命令识别恶意伪装进程
  1. top:动态实时监控,Linux 任务管理器,默认 3 秒刷新顶部五大块信息:系统运行时间 + 负载、进程统计、CPU、内存 Mem、交换分区 Swap。

load average:1 分钟、5 分钟、15 分钟系统负载,超过 CPU 核心数代表压力大。 wa 值高代表 IO 磁盘瓶颈;swap 持续使用代表物理内存不够。

top 交互快捷键

表格

按键功能
P按 CPU 降序排序
M按内存降序排序
k输入 PID 杀死进程
q退出 top
  1. pgrep:专门过滤 PID,不会产生多余 grep 进程
pgrep -l sshd #‑l同时输出PID+进程名 pgrep -l -U nginx #看nginx用户所有进程
  1. pstree:进程树,看父子关系
pstree -p #显示PID,最常用 pstree -ap root

7.1.4 进程控制:启动、挂起、终止

  1. 前台 & 后台启动
  • 前台:直接敲命令,占用终端,命令执行完才能输入下一条。
  • 后台:命令末尾加&,放到后台跑,释放终端,适合耗时任务。输出[1] 2345,1 是任务号,2345 是 PID。
cp /dev/cdrom myiso.iso &
  1. 任务调度(只对当前终端内的后台任务生效)
  • Ctrl+Z:把正在前台运行的进程挂起(停止,放后台暂停)
  • jobs -l:查看本终端后台任务列表(任务号、PID、状态)
  • bg 任务号:挂起任务放到后台继续运行
  • fg 任务号:把后台任务切回前台

⚠️注意:jobs 只能看当前终端的任务;换一个 ssh 终端看不到别的终端 jobs 任务。

  1. 进程终止信号

优先正常终止,尽量少用‑9强制杀,强制杀可能丢数据、损坏文件。

表格

方式说明
Ctrl+C终止前台正在运行进程
kill PID发送 15 SIGTERM,正常结束,程序自己清理资源退出
kill -9 PIDSIGKILL 强制杀死,程序没有机会收尾,万不得已才用
killall 进程名按进程名批量杀进程
pkill -U 用户名杀掉该用户全部进程,处理恶意账号

7.2 Systemd 服务控制与启动过程优化

服务 = 常驻后台的守护进程(sshd、crond),systemctl 统一管理.service 单元。

7.2.1 systemctl 核心操作

.service后缀可以省略,systemctl start sshd等价sshd.service

表格

命令功能使用场景
systemctl start xxx启动服务服务没运行
systemctl stop xxx停止服务关闭业务
systemctl restart xxx重启服务,先 stop 再 start,服务会中断改配置后,服务不支持 reload 时用
systemctl reload xxx重载配置,不中断进程支持 reload 的服务优先选,生产少中断业务
systemctl status xxx查看状态日志,排错最重要看是否 active (running),看报错
systemctl enable xxx设置开机自启核心业务
systemctl disable xxx关闭开机自启不需要开机启动的服务
systemctl is‑enabled xxx查询是否开机自启验证配置

个人经验:生产环境优先 reload;只有 reload 无效才 restart,避免业务断开。status 会打印报错,排错第一看 status。

7.2.2 Target 运行级别切换

  1. 查看
runlevel #看旧版运行级别数字 systemctl get‑default #查看开机默认target
  1. 临时切换(重启失效)
init 3 #切换字符界面 multi‑user.target systemctl isolate multi‑user.target init 5 #图形界面 graphical.target init 0 #关机 init 6 #重启
  1. 永久切换(重启生效)
systemctl set‑default multi‑user.target #服务器默认字符界面

7.2.3 开机服务裁剪优化

服务器很多服务默认开机启动,很多业务用不上,关掉可以节省内存,加快开机。

  • 核心服务必须 enable:sshd、crond、rsyslog、network、lvm2‑monitor
  • 非生产服务:bluetooth 蓝牙、atd、kdump、vsftpd,stop+disable 关掉。

操作工具:

  1. ntsysv:字符交互式界面,空格勾选开机启动,适合批量修改。
  2. systemctl stop / disable命令行逐条操作。

查看所有单元状态:

systemctl list‑units --type=service #当前正在运行的服务 systemctl list‑unit‑files --type=service #所有服务开机自启状态 enabled/disabled

7.3 计划任务管理:自动化运维

两类:at 一次性任务;crontab 周期性重复任务

7.3.1 at:一次性计划任务(只执行一次)

依赖atd服务,服务没启动任务不会跑。

dnf install at systemctl start atd systemctl enable atd
  1. 设置任务:at 时间,进入at>交互输入多条命令,Ctrl+D 提交任务
at 15:30 2025‑05‑10 at> df -h > /tmp/disk.log at> <EOT> #Ctrl+D
  1. 管理 at 任务
atq #查看未执行的at任务,输出任务编号 atrm 1 #删除任务编号1的任务

任务输出默认发送到用户系统邮箱/var/spool/mail/用户名,建议重定向输出到日志文件。

7.3.2 crontab:周期性计划任务(生产高频)

依赖 crond 服务,系统默认开机启动。crond 监控配置文件,修改任务不需要重启服务自动生效

  1. crontab 配置分类
  • 用户级:crontab -e编辑,文件存放在/var/spool/cron/用户名,每个用户独立任务。
  • 系统级:/etc/crontab/etc/cron.d/*,管理员系统任务,不建议普通用户直接修改。
  1. crontab 命令选项

    表格

    选项作用
    crontab -e编辑当前用户定时任务,vi 编辑器
    crontab -l列出当前用户任务
    crontab -r清空当前用户全部定时任务
    crontab -u 用户名root 管理别的用户的任务
  2. 五段时间语法(分 时 日 月 周 + 命令)* * * * * 绝对路径命令/脚本

表格

字段范围特殊符号
分钟0‑59*任意;连续;,离散;*/n间隔 n
小时0‑23同上
日期1‑31同上
月份1‑12同上
星期0‑70 和 7 都代表周日;日期和星期是或关系,满足其一就执行

⚠️大坑:crontab 环境变量和登录 shell 不一样!命令必须写绝对路径;尽量写脚本,脚本内部全部使用绝对路径。

示例

#每天凌晨4点02分执行脚本 02 4 * * * /root/daily_backup.sh #每周六7点30分重启httpd 30 7 * * 6 /usr/bin/systemctl restart httpd #每5分钟执行 */5 * * * * /usr/bin/df -h >> /tmp/diskstat.log
  1. 常见故障排错
    • 任务没执行:命令用了相对路径,用 which 拿到命令绝对路径填入;crond 服务没启动;输出没写日志误以为没跑,把输出重定向日志>> /xxx/cron.log 2>&1
    • 任务每分钟跑:分钟字段写了*,忘记指定具体分钟。
    • 脚本手动跑正常,cron 跑失败:脚本缺少环境变量,脚本开头source /etc/profile加载系统环境。

本章总结

  1. 系统启动流程:BIOS/UEFI → GRUB2 → 内核 → systemd (PID=1 始祖进程)。PID=1 不能 kill。
  2. 进程查看:ps 静态快照;top 动态监控;pgrep 查 PID;pstree 看进程树。
  3. 进程前台后台:&后台运行,Ctrl+Z挂起,jobs/bg/fg任务调度;kill 优先 15 正常终止,‑9强制杀死慎用。
  4. systemctl 管理 service 服务:start/stop/restart/reload/status/enable/disable;reload 尽量代替 restart 减少业务中断。
  5. Target 替代传统运行级别;临时切换systemctl isolate,永久切换systemctl set‑default multi‑user.target,服务器一般默认字符界面。
  6. 开机服务裁剪,关闭不需要的服务,节约资源。
  7. at 一次性定时任务,依赖 atd;at编辑,atq查看,atrm删除。
  8. crontab 周期性任务:五段时间语法,命令必须绝对路径;日期星期逻辑是或;常见排错点。

高频命令速查表

进程管理

表格

命令功能
ps aux静态查看全部进程
ps -elf看 PPID 父进程
top动态监控资源
pgrep -l 进程名获取 PID
pstree -p进程树带 PID
jobs -l当前终端后台任务
bg %1后台恢复挂起任务
fg %1切回前台
kill PID正常终止进程
kill -9 PID强制杀死进程
killall 进程名按名字批量杀进程
systemctl 服务管理

表格

命令功能
systemctl start/stop/restart/reload xxx服务启停重载
systemctl status xxx查看服务状态排错
systemctl enable/disable xxx开机自启开关
systemctl get‑default查看默认 target
systemctl set‑default multi‑user.target永久字符界面
ntsysv交互式配置开机自启服务
计划任务

表格

命令功能
at HH:MM YYYY‑MM‑DD创建一次性任务,Ctrl+D 提交
atq查看 at 任务
atrm 任务编号删除 at 任务
crontab -e编辑用户周期任务
crontab -l列出任务
crontab -r清空当前用户全部 crontab 任务

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询