进程和服务管理
进程基础概念
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 # 查看服务配置
总结
进程和服务管理要点:
- 进程监控:掌握ps、top等命令查看进程状态
- 进程控制:学会启动、停止、暂停进程
- 服务管理:熟练使用systemctl管理系统服务
- 定时任务:配置cron和systemd定时器
- 性能监控:监控系统负载和资源使用
下一课预告
在下一课中,我们将学习网络配置与管理,包括:
- 网络接口配置
- 防火墙设置
- 网络诊断工具
- SSH服务配置
💡 小贴士:进程管理是系统运维的核心技能。建议多练习使用各种监控工具,熟悉systemd服务管理,这对日常运维工作非常重要。
📚 文章对你有帮助?请关注我的公众号,万分感谢!
获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号
第一时间获取最新技术文章

添加微信
技术交流 · 问题答疑 · 学习指导
评论讨论
欢迎留下你的想法和建议