Day 005:进程管理与服务控制详解

目录

理论学习

1. 进程状态全解析

2. systemctl 命令进阶

实操演练

1. 监控资源:htop 高级用法

2. 后台运行:nohup 与 & 深入

3. 服务管理:Apache 深度操作

复习巩固:绘制进程状态图

1. 工具选择:Draw.io 深度使用

2. 状态图设计步骤


理论学习

1. 进程状态全解析


进程是操作系统资源分配的最小单位,其状态反映了它在生命周期中的不同阶段。Linux通过状态码精确描述进程行为:

  • R (Running/Runnable, 运行/可运行)
    • 定义:进程正在CPU上执行,或位于就绪队列中等待CPU时间片。
    • 细节
      • 用户空间程序通常处于TASK_RUNNING状态。
      • 内核线程也可能显示为R,但无用户空间上下文。
  • S (Interruptible Sleep, 可中断睡眠)
    • 定义:进程主动放弃CPU,等待某个事件(如I/O完成、信号接收)。
    • 触发场景
      • 执行read()系统调用等待磁盘数据。
      • 调用sleep()暂停执行。
      • 等待用户输入(如getchar())。
    • 特性:收到信号(如SIGTERM)会立即唤醒。
  • Z (Zombie, 僵尸进程)
    • 定义:进程已终止,但父进程未通过wait()waitpid()回收其资源。
    • 危害:长期存在的僵尸进程会耗尽进程表条目,导致系统无法创建新进程。
    • 解决方法
      • 杀死父进程(僵尸进程会被init进程接管并回收)。
      • 在父进程中添加信号处理函数,响应SIGCHLD信号并回收子进程。
  • D (Uninterruptible Sleep, 不可中断睡眠)
    • 定义:进程在等待某些仅能由内核处理的I/O操作(如直接磁盘访问)。
    • 特点:即使收到SIGKILL信号也无法被终止,必须等待操作完成。
    • 常见场景
      • NFS文件系统挂载失败导致的进程挂起。
      • 硬件故障时的I/O阻塞。
  • T (Stopped, 暂停)
    • 定义:进程被暂停执行,通常由信号触发。
    • 触发信号
      • SIGSTOPkill -STOP <PID>):手动暂停进程。
      • SIGTSTPCtrl+Z):在终端中暂停前台进程。
    • 恢复:通过SIGCONTkill -CONT <PID>)继续执行。
  • X (Dead, 死亡)
    • 定义:进程已终止,但尚未从进程表中完全删除。
    • 生命周期:短暂状态,通常仅在进程终止后立即可见。

2. systemctl 命令进阶


systemctl 是Systemd系统和服务管理器的核心工具,提供全面的系统和服务控制功能:

  • 基本命令
    • systemctl start apache2:启动服务(若服务未安装会报错)。
    • systemctl stop apache2:立即停止服务(可能中断用户连接)。
    • systemctl restart apache2:重启服务(先停止再启动,适用于配置更新)。
    • systemctl reload apache2:重新加载配置文件(不中断服务,需服务支持)。
    • systemctl enable apache2:设置开机自启(创建符号链接到/etc/systemd/system/multi-user.target.wants/)。
    • systemctl disable apache2:取消开机自启(删除符号链接)。
    • systemctl status apache2:查看服务状态(包括运行时间、最近日志、监听端口等)。
    • systemctl is-active apache2:检查服务是否活跃。
    • systemctl is-enabled apache2:检查是否开机自启。
  • 高级功能
    • 查看服务依赖

      bash

      systemctl list-dependencies apache2
    • 屏蔽服务(防止意外启动):

      bash

      systemctl mask apache2 # 创建符号链接到/dev/null
      systemctl unmask apache2 # 取消屏蔽
    • 编辑服务单元文件

      bash

      systemctl edit apache2 # 创建/etc/systemd/system/apache2.service.d/override.conf

实操演练

1. 监控资源:htop 高级用法

  • 安装与运行

    bash

    sudo apt update && sudo apt install htop -y
    htop
  • 界面导航
    • F2 (Setup):自定义显示列、颜色、排序方式。
    • F3 (Search):按进程名或PID搜索。
    • F4 (Filter):过滤进程(如仅显示用户进程)。
    • F5 (Tree):以树形结构显示进程层级。
    • F6 (SortBy):按CPU、内存、时间等排序。
    • F7/F8 (Nice):调整进程优先级(需权限)。
    • F9 (Kill):发送信号终止进程。
    • F10 (Quit):退出htop

2. 后台运行:nohup 与 & 深入

  • 命令详解

    bash

    nohup python3 -m http.server 8000 &
    • &:将命令放入后台执行,释放终端。
    • nohup:忽略SIGHUP信号,确保终端关闭后进程仍运行。
    • 输出重定向:默认保存到nohup.out,可用>重定向:

      bash

      nohup python3 -m http.server 8000 > server.log 2>&1 &
  • 后台进程管理
    • 查看进程

      bash

      jobs -l # 查看当前会话的后台任务
      ps aux | grep python3 # 通过进程名查找
    • 恢复前台

      bash

      fg %1 # 将编号为1的后台任务恢复到前台
    • 终止进程

      bash

      kill %1 # 终止编号为1的后台任务

3. 服务管理:Apache 深度操作

  • 查看服务状态

    bash

    systemctl status apache2
    • 输出解析
      • Loaded: 服务单元文件路径及是否开机自启。
      • Active: 服务当前状态(active (running)表示运行中)。
      • Main PID: 主进程PID。
      • Tasks: 进程数(仅限使用TaskMax的服务)。
      • Memory: 内存占用。
      • CGroup: 控制组信息(资源限制)。
      • Logs: 最近日志条目(通常来自journalctl)。
  • 重启服务

    bash

    systemctl restart apache2
    • 场景:修改配置文件后需重启生效(如修改虚拟主机配置)。
    • 注意事项:重启会短暂中断服务,确保在低峰时段操作。
  • 查看服务日志

    bash

    journalctl -u apache2 --since "10 minutes ago"
    • 参数说明
      • -u apache2: 指定服务单元。
      • --since "10 minutes ago": 显示最近10分钟的日志。
      • --follow: 实时跟踪日志(类似tail -f)。
      • -b: 显示本次启动以来的日志。
      • -p err: 仅显示错误级别日志。
  • 配置服务端口
    • 编辑配置文件

      bash

      sudo systemctl edit apache2 # 创建覆盖配置文件
    • 添加端口绑定

      ini

      [Service]
      Environment="APACHE_LISTEN_PORTS=80 8080"
    • 重启服务

      bash

      sudo systemctl daemon-reload # 重新加载配置
      sudo systemctl restart apache2
  • 处理服务启动失败
    • 查看状态

      bash

      systemctl status apache2
    • 检查日志

      bash

      journalctl -u apache2 -b --no-pager
    • 常见原因
      • 端口冲突(使用netstat -tulpn | grep :80检查)。
      • 配置文件语法错误(使用apachectl configtest验证)。
      • 依赖服务未启动(如systemctl is-enabled mysql)。

复习巩固:绘制进程状态图

1. 工具选择:Draw.io 深度使用

2. 状态图设计步骤

  • 添加状态节点
    • 使用圆形或椭圆形表示状态(R、S、Z、D、T)。
    • 双击节点输入状态名称。
  • 绘制转换箭头
    • 使用箭头工具连接状态节点。
    • 双击箭头输入触发条件(如“kill -STOP”、“I/O完成”)。
  • 标注状态特性
    • 在状态节点旁添加文本框,描述状态行为(如“等待事件”、“不可中断”)。
  • 示例图结构
     
      
    [R] <--> [S] (等待事件/信号唤醒)
    ↑     ↓
    [T] ← 暂停信号 [D] (硬件I/O阻塞)
    ↓     ↑
    [Z] ← 进程终止 [父进程wait()]

3. 高级技巧

  • 使用图层:将状态和箭头分组到不同图层,便于管理。
  • 添加样式:自定义颜色、字体、边框,提高可读性。
  • 导出图表:支持PNG、SVG、PDF等多种格式,方便分享和嵌入文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值