第6课:进程和服务管理

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

推广

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

进程和服务管理

进程基础概念

1. 什么是进程

进程定义

# 进程是正在运行的程序实例
# 每个进程都有唯一的进程ID (PID)
# 进程包含程序代码、数据、系统资源等

进程类型

# 前台进程 (Foreground Process)
# 直接与用户交互,占用终端

# 后台进程 (Background Process)  
# 在后台运行,不占用终端

# 守护进程 (Daemon Process)
# 系统启动时启动,在后台持续运行

2. 进程状态

进程状态类型

R (Running)                   # 运行状态
S (Sleeping)                  # 可中断睡眠
D (Uninterruptible Sleep)     # 不可中断睡眠
T (Stopped)                   # 停止状态
Z (Zombie)                    # 僵尸进程

查看进程状态

ps aux                        # 查看所有进程
ps -ef                        # 另一种格式显示进程
ps -u username                # 查看特定用户进程
ps -C processname             # 查看特定程序进程

进程查看和监控

1. ps命令详解

基本用法

ps                            # 显示当前终端进程
ps aux                        # 显示所有进程详细信息
ps -ef                        # 显示所有进程 (另一种格式)
ps -eLf                       # 显示线程信息

# 输出字段说明 (ps aux)
USER    # 进程所有者
PID     # 进程ID
%CPU    # CPU使用率
%MEM    # 内存使用率
VSZ     # 虚拟内存大小
RSS     # 物理内存大小
TTY     # 终端类型
STAT    # 进程状态
START   # 启动时间
TIME    # CPU时间
COMMAND # 命令行

进程过滤和排序

ps aux | grep nginx           # 查找nginx进程
ps aux | sort -k3 -nr         # 按CPU使用率排序
ps aux | sort -k4 -nr         # 按内存使用率排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem  # 自定义输出格式

2. top命令

实时进程监控

top                           # 实时显示进程信息
htop                          # 增强版top (需要安装)

# top快捷键
q                            # 退出
k                            # 杀死进程
r                            # 重新设置进程优先级
M                            # 按内存使用排序
P                            # 按CPU使用排序
T                            # 按运行时间排序
u                            # 显示特定用户进程
1                            # 显示所有CPU核心

top输出解释

# 第一行:系统负载
load average: 0.15, 0.25, 0.30  # 1分钟、5分钟、15分钟平均负载

# 第二行:任务统计
Tasks: 200 total, 1 running, 199 sleeping

# 第三行:CPU使用率
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 93.0 id, 0.0 wa

# 第四行:内存使用
MiB Mem : 8192.0 total, 2048.0 free, 4096.0 used, 2048.0 buff/cache

3. 其他监控工具

pstree - 进程树

pstree                        # 显示进程树
pstree -p                     # 显示PID
pstree -u                     # 显示用户
pstree username               # 显示特定用户进程树

pgrep/pkill - 进程查找和终止

pgrep nginx                   # 查找nginx进程PID
pgrep -u username             # 查找特定用户进程
pgrep -f "pattern"            # 按命令行模式查找

pkill nginx                   # 终止nginx进程
pkill -u username             # 终止特定用户所有进程
pkill -f "pattern"            # 按模式终止进程

进程控制

1. 启动进程

前台和后台启动

command                       # 前台运行
command &                     # 后台运行
nohup command &               # 后台运行,忽略挂断信号
nohup command > output.log 2>&1 &  # 后台运行并重定向输出

作业控制

jobs                          # 显示当前作业
bg                            # 将作业放到后台
fg                            # 将作业调到前台
fg %1                         # 将作业1调到前台

# 快捷键
Ctrl+Z                        # 暂停当前进程
Ctrl+C                        # 终止当前进程

2. 终止进程

kill命令

kill PID                      # 终止进程 (发送TERM信号)
kill -9 PID                   # 强制终止进程 (发送KILL信号)
kill -15 PID                  # 正常终止进程 (发送TERM信号)
kill -STOP PID                # 暂停进程
kill -CONT PID                # 继续进程

# 常用信号
SIGTERM (15)                  # 正常终止信号
SIGKILL (9)                   # 强制终止信号
SIGSTOP (19)                  # 暂停信号
SIGCONT (18)                  # 继续信号
SIGHUP (1)                    # 挂断信号

killall命令

killall nginx                 # 终止所有nginx进程
killall -9 firefox            # 强制终止所有firefox进程
killall -u username           # 终止特定用户所有进程

3. 进程优先级

nice和renice

# 启动时设置优先级
nice -n 10 command            # 以优先级10启动命令
nice -n -5 command            # 以优先级-5启动命令 (需要root)

# 修改运行中进程优先级
renice 10 PID                 # 修改进程优先级为10
renice -5 -u username         # 修改用户所有进程优先级

# 优先级范围:-20 (最高) 到 19 (最低)
# 普通用户只能降低优先级,root可以提高优先级

系统服务管理

1. systemd基础

systemd概念

# systemd是现代Linux发行版的初始化系统
# 管理系统服务、挂载点、设备等
# 使用unit文件描述服务配置

systemctl命令

systemctl status              # 查看系统状态
systemctl list-units         # 列出所有单元
systemctl list-unit-files    # 列出所有单元文件
systemctl --failed           # 查看失败的服务

2. 服务管理

服务控制

# 启动/停止服务
sudo systemctl start nginx   # 启动nginx服务
sudo systemctl stop nginx    # 停止nginx服务
sudo systemctl restart nginx # 重启nginx服务
sudo systemctl reload nginx  # 重新加载nginx配置

# 查看服务状态
systemctl status nginx       # 查看nginx服务状态
systemctl is-active nginx    # 检查服务是否运行
systemctl is-enabled nginx   # 检查服务是否开机启动

开机启动管理

sudo systemctl enable nginx  # 设置开机启动
sudo systemctl disable nginx # 取消开机启动
sudo systemctl mask nginx    # 禁用服务 (无法启动)
sudo systemctl unmask nginx  # 取消禁用

3. 服务配置

查看服务配置

systemctl cat nginx          # 查看服务配置文件
systemctl show nginx         # 显示服务属性
systemctl list-dependencies nginx  # 显示服务依赖

服务文件位置

/etc/systemd/system/          # 系统管理员创建的服务
/usr/lib/systemd/system/      # 软件包安装的服务
/run/systemd/system/          # 运行时创建的服务

# 重新加载配置
sudo systemctl daemon-reload # 重新加载systemd配置

4. 创建自定义服务

服务文件示例

# 创建服务文件
sudo nano /etc/systemd/system/myapp.service

[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/myapp
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

服务文件配置说明

# [Unit] 部分
Description=                  # 服务描述
After=                        # 依赖的服务
Before=                       # 在哪些服务之前启动
Requires=                     # 强依赖
Wants=                        # 弱依赖

# [Service] 部分
Type=                         # 服务类型 (simple, forking, oneshot等)
ExecStart=                    # 启动命令
ExecStop=                     # 停止命令
ExecReload=                   # 重载命令
User=                         # 运行用户
Group=                        # 运行组
WorkingDirectory=             # 工作目录
Environment=                  # 环境变量
Restart=                      # 重启策略
RestartSec=                   # 重启间隔

# [Install] 部分
WantedBy=                     # 安装目标
RequiredBy=                   # 被哪些服务需要

定时任务

1. cron服务

crontab命令

crontab -l                    # 查看当前用户定时任务
crontab -e                    # 编辑当前用户定时任务
crontab -r                    # 删除当前用户所有定时任务
sudo crontab -u username -l   # 查看指定用户定时任务

cron时间格式

# 格式:分 时 日 月 周 命令
# * * * * * command
# │ │ │ │ │
# │ │ │ │ └─── 星期 (0-7, 0和7都表示周日)
# │ │ │ └───── 月份 (1-12)
# │ │ └─────── 日期 (1-31)
# │ └───────── 小时 (0-23)
# └─────────── 分钟 (0-59)

# 示例
0 2 * * *                     # 每天凌晨2点
*/5 * * * *                   # 每5分钟
0 9-17 * * 1-5                # 工作日9-17点整点
0 0 1 * *                     # 每月1号凌晨

cron示例

# 编辑crontab
crontab -e

# 添加定时任务
0 2 * * * /usr/bin/backup.sh  # 每天2点执行备份
*/10 * * * * /usr/bin/check_disk.sh  # 每10分钟检查磁盘
0 0 * * 0 /usr/bin/weekly_cleanup.sh  # 每周日执行清理

2. systemd定时器

创建定时器

# 创建服务文件
sudo nano /etc/systemd/system/backup.service

[Unit]
Description=Backup Service

[Service]
Type=oneshot
ExecStart=/usr/bin/backup.sh

# 创建定时器文件
sudo nano /etc/systemd/system/backup.timer

[Unit]
Description=Backup Timer
Requires=backup.service

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

管理定时器

sudo systemctl enable backup.timer   # 启用定时器
sudo systemctl start backup.timer    # 启动定时器
systemctl list-timers               # 查看所有定时器
systemctl status backup.timer       # 查看定时器状态

系统监控

1. 系统负载监控

负载平均值

uptime                        # 显示系统运行时间和负载
w                             # 显示用户和负载信息
cat /proc/loadavg             # 查看负载文件

# 负载解释
# 1分钟、5分钟、15分钟平均负载
# 负载1.0表示CPU完全利用
# 负载超过CPU核心数表示系统过载

系统资源监控

free -h                       # 查看内存使用情况
df -h                         # 查看磁盘使用情况
iostat                        # 查看IO统计 (需要安装sysstat)
vmstat                        # 查看虚拟内存统计
sar                           # 系统活动报告 (需要安装sysstat)

2. 进程监控脚本

监控脚本示例

#!/bin/bash
# 进程监控脚本

PROCESS="nginx"
LOGFILE="/var/log/process_monitor.log"

check_process() {
    if pgrep "$PROCESS" > /dev/null; then
        echo "$(date): $PROCESS is running" >> "$LOGFILE"
    else
        echo "$(date): $PROCESS is not running, restarting..." >> "$LOGFILE"
        systemctl start "$PROCESS"
    fi
}

check_process

性能调优

1. 进程优化

CPU优化

# 查看CPU密集型进程
ps aux --sort=-%cpu | head -10

# 使用taskset绑定CPU
taskset -c 0,1 command        # 绑定到CPU 0和1
taskset -p 0x3 PID            # 将进程绑定到CPU 0和1

内存优化

# 查看内存使用
ps aux --sort=-%mem | head -10
pmap PID                      # 查看进程内存映射
cat /proc/PID/status          # 查看进程状态信息

2. 系统调优

内核参数调优

# 查看内核参数
sysctl -a                     # 显示所有内核参数
sysctl vm.swappiness          # 查看特定参数

# 临时修改参数
sudo sysctl vm.swappiness=10  # 减少swap使用

# 永久修改参数
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p               # 重新加载配置

故障排除

1. 进程问题诊断

僵尸进程处理

# 查找僵尸进程
ps aux | grep '<defunct>'
ps aux | awk '$8 ~ /^Z/ {print $2}'

# 处理僵尸进程
# 通常需要终止父进程
ps -eo pid,ppid,state,comm | grep Z
kill -TERM parent_pid

进程卡死处理

# 查看进程状态
ps aux | grep process_name
lsof -p PID                   # 查看进程打开的文件
strace -p PID                 # 跟踪系统调用

# 生成进程转储
gcore PID                     # 生成核心转储文件

2. 服务问题诊断

服务启动失败

systemctl status service_name # 查看服务状态
journalctl -u service_name    # 查看服务日志
journalctl -u service_name -f # 实时查看日志
systemctl cat service_name    # 查看服务配置

总结

进程和服务管理要点:

  1. 进程监控:掌握ps、top等命令查看进程状态
  2. 进程控制:学会启动、停止、暂停进程
  3. 服务管理:熟练使用systemctl管理系统服务
  4. 定时任务:配置cron和systemd定时器
  5. 性能监控:监控系统负载和资源使用

下一课预告

在下一课中,我们将学习网络配置与管理,包括:

  • 网络接口配置
  • 防火墙设置
  • 网络诊断工具
  • SSH服务配置

💡 小贴士:进程管理是系统运维的核心技能。建议多练习使用各种监控工具,熟悉systemd服务管理,这对日常运维工作非常重要。

Vue3 + TypeScript 企业级项目实战

课程推荐

Vue3 + TypeScript 企业级项目实战
Python 全栈开发工程师培训

热门课程

Python 全栈开发工程师培训

📚 文章对你有帮助?请关注我的公众号,万分感谢!

获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号

关注公众号

第一时间获取最新技术文章

添加微信

添加微信

技术交流 · 问题答疑 · 学习指导

评论讨论

欢迎留下你的想法和建议