112 lines
2.9 KiB
Markdown
112 lines
2.9 KiB
Markdown
---
|
||
title: "进程管理"
|
||
tags: [linux, process, backup, ubuntu]
|
||
date: 2026-04-26
|
||
---
|
||
|
||
# 进程管理 (Process Management)
|
||
|
||
## Definition
|
||
进程管理涵盖 Linux 系统中进程的创建、监控、控制和终止。在备份场景下,进程管理主要指如何安全地启动、监控和停止 rsync 备份进程。
|
||
|
||
## Starting Background Processes
|
||
|
||
### nohup (No Hang Up)
|
||
防止终端关闭导致进程被 SIGHUP 信号终止:
|
||
```bash
|
||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||
```
|
||
- `nohup`: 忽略挂起信号
|
||
- `> /dev/null 2>&1`: 重定向输出到空设备
|
||
- `&`: 后台运行
|
||
|
||
### screen / tmux (推荐)
|
||
创建持久化终端会话:
|
||
```bash
|
||
# 创建新会话
|
||
screen -S backup
|
||
|
||
# 运行脚本
|
||
sudo /usr/local/bin/rsync_backup.sh
|
||
|
||
# 脱离会话 (继续运行)
|
||
Ctrl + A + D
|
||
|
||
# 恢复会话
|
||
screen -r backup
|
||
```
|
||
|
||
**tmux 命令相同**,将 `screen` 替换为 `tmux`。
|
||
|
||
## Stopping Processes
|
||
|
||
### SIGTERM vs SIGKILL
|
||
|
||
| Signal | Command | Behavior | Use Case |
|
||
|--------|---------|----------|----------|
|
||
| SIGTERM (15) | `killall rsync` | 优雅终止,允许进程完成当前写入并清理 | **首选**,防止数据损坏 |
|
||
| SIGKILL (9) | `killall -9 rsync` | 强制立即终止,无法清理 | 仅在进程卡死时使用 |
|
||
|
||
### Process Management Commands
|
||
```bash
|
||
# 查看 rsync 进程
|
||
ps aux | grep rsync
|
||
|
||
# 优雅停止所有 rsync 进程
|
||
sudo killall rsync
|
||
|
||
# 强制杀死(谨慎使用)
|
||
sudo killall -9 rsync
|
||
|
||
# 通过脚本名称停止
|
||
sudo pkill -f rsync_backup.sh
|
||
```
|
||
|
||
## Lock File Pattern
|
||
防止重复执行同一备份任务:
|
||
```bash
|
||
LOCKFILE="/tmp/rsync_backup.lock"
|
||
|
||
# 检查锁文件是否存在且进程存活
|
||
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
|
||
echo "备份任务已在运行中,跳过本次执行。"
|
||
exit
|
||
fi
|
||
|
||
# 创建锁文件(写入当前进程 PID)
|
||
echo $$ > ${LOCKFILE}
|
||
|
||
# 脚本结束时清理锁文件
|
||
trap "rm -f ${LOCKFILE}" EXIT
|
||
```
|
||
|
||
## Signal Handling
|
||
- `SIGHUP (1)`: 终端关闭,nohup 可屏蔽
|
||
- `SIGINT (2)`: Ctrl+C 中断
|
||
- `SIGTERM (15)`: 优雅终止请求
|
||
- `SIGKILL (9)`: 强制终止(不可捕获)
|
||
|
||
## Common Issues
|
||
|
||
### rsync Error Code 20
|
||
表示进程被手动中断(SIGINT/SIGTERM):
|
||
```bash
|
||
# 使用 nohup 避免此问题
|
||
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
|
||
```
|
||
|
||
### Temporary Files Residue
|
||
强行停止 rsync 后,目标目录可能残留 `.` 开头的临时文件:
|
||
```bash
|
||
# 清理残留临时文件(确保无 rsync 进程运行)
|
||
sudo find /mnt/nas_backup/ -name ".*" -type f -delete
|
||
```
|
||
|
||
## Related Concepts
|
||
- [[增量备份]] — 进程管理确保备份任务安全执行
|
||
- [[Cron定时任务]] — 后台进程由 Cron 自动调度
|
||
- [[挂载点检查]] — 进程执行前的安全验证
|
||
|
||
## See Also
|
||
- [[永久挂载]] — 网络存储与进程执行的关系
|