进程管理与系统监控
目录
进程管理与系统监控
理论讲解
1. 什么是进程?
- 运行中的程序:你启动的每个命令、服务、脚本都是一个进程
- 父子关系:进程可以创建子进程(比如Shell启动Python脚本)
- 后台 vs 前台:前台进程占用终端,后台进程在背后运行
2. 重要性
- AI训练:训练模型可能运行几天,需要放到后台,并能随时查看状态
- 嵌入式:编译大型项目时,需要监控CPU/内存使用
- 调试:程序“卡住”或崩溃时,需要找到并结束它
- 服务器管理:监控系统资源,防止过载
代码
查看进程
# 1. 最简单的进程查看
ps
# 2. 查看当前终端的所有进程
ps -f
# 3. 查看系统所有进程(最常用!)
ps aux
# 4. 用树状结构查看进程关系
pstree
理解 ps aux 输出:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mzt2006 1234 0.5 2.1 18564 8436 pts/0 Ss 10:30 0:00 -bash
mzt2006 5678 98.5 45.2 8.7G 3.2G pts/0 R+ 11:15 15:30 python train.py
- PID:进程ID(唯一标识)
- %CPU:CPU占用百分比
- %MEM:内存占用百分比
- COMMAND:进程名/命令
进程控制
# 1. 启动一个长时间运行的“模拟AI训练”
echo "模拟AI训练脚本..."
cat > simulate_ai_training.sh << 'EOF'
#!/bin/bash
echo "AI训练开始于: $(date)"
for i in {1..30}; do
echo "Epoch $i/30 - Loss: 0.$((RANDOM % 999))"
sleep 2 # 模拟耗时计算
done
echo "训练完成!"
EOF
chmod +x simulate_ai_training.sh
# 2. 在前台运行(会占用终端)
./simulate_ai_training.sh
# 按 Ctrl+C 中断它
后台进程管理
# 1. 在后台运行(& 符号)
./simulate_ai_training.sh > training.log 2>&1 &
# 2. 查看后台作业
jobs
# 3. 查看这个后台进程的PID
ps aux | grep simulate_ai
# 4. 把后台作业调回前台
fg %1 # %1 是jobs显示的作业号
# 5. 再次放到后台(先按 Ctrl+Z 暂停,然后)
bg %1
结束进程
# 1. 启动一个测试进程
sleep 300 &
# 2. 查看它的PID
ps aux | grep sleep
# 3. 用不同方式结束它
kill PID # 优雅终止(发送SIGTERM)
kill -9 PID # 强制杀死(SIGKILL,最后手段)
pkill sleep # 按进程名结束
killall sleep # 结束所有同名进程
系统监控
# 1. 动态监控进程(类似Windows任务管理器)
top
# 2. 更强大的监控(需要安装)
# sudo apt install htop
htop
# 3. 查看内存使用
free -h
# 4. 查看磁盘使用
df -h
# 5. 查看最耗CPU的进程
ps aux --sort=-%cpu | head -10
# 6. 查看最耗内存的进程
ps aux --sort=-%mem | head -10
实际应用场景
场景1:AI训练监控
# 启动训练(后台,输出到日志)
python train.py --epochs=100 > train.log 2>&1 &
# 实时查看训练日志
tail -f train.log
# 监控GPU使用(如果有NVIDIA GPU)
nvidia-smi
# 或持续监控
watch -n 1 nvidia-smi
场景2:嵌入式编译优化
# 编译大型项目,监控资源
make -j4 all # 用4个核心并行编译
# 在另一个终端查看编译进程
watch -n 1 "ps aux | grep make | grep -v grep"
信号(Signals)概念
常用信号:
kill -l # 列出所有信号
# 常用信号编号:
# 1) SIGHUP - 挂起(重新加载配置)
# 2) SIGINT - 中断(Ctrl+C)
# 9) SIGKILL - 强制杀死(无法捕获)
# 15) SIGTERM - 优雅终止(默认)
# 18) SIGCONT - 继续运行
# 19) SIGSTOP - 暂停(Ctrl+Z)
信号使用示例:
# 优雅地让进程重新读取配置文件
kill -1 PID # 发送SIGHUP,nginx/apache会重载配置
# 暂停进程
kill -19 PID # SIGSTOP
# 恢复暂停的进程
kill -18 PID # SIGCONT