2.9 KiB
2.9 KiB
title, tags, date
| title | tags | date | ||||
|---|---|---|---|---|---|---|
| 进程管理 |
|
2026-04-26 |
进程管理 (Process Management)
Definition
进程管理涵盖 Linux 系统中进程的创建、监控、控制和终止。在备份场景下,进程管理主要指如何安全地启动、监控和停止 rsync 备份进程。
Starting Background Processes
nohup (No Hang Up)
防止终端关闭导致进程被 SIGHUP 信号终止:
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
nohup: 忽略挂起信号> /dev/null 2>&1: 重定向输出到空设备&: 后台运行
screen / tmux (推荐)
创建持久化终端会话:
# 创建新会话
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
# 查看 rsync 进程
ps aux | grep rsync
# 优雅停止所有 rsync 进程
sudo killall rsync
# 强制杀死(谨慎使用)
sudo killall -9 rsync
# 通过脚本名称停止
sudo pkill -f rsync_backup.sh
Lock File Pattern
防止重复执行同一备份任务:
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):
# 使用 nohup 避免此问题
sudo nohup /usr/local/bin/rsync_backup.sh > /dev/null 2>&1 &
Temporary Files Residue
强行停止 rsync 后,目标目录可能残留 . 开头的临时文件:
# 清理残留临时文件(确保无 rsync 进程运行)
sudo find /mnt/nas_backup/ -name ".*" -type f -delete
Related Concepts
See Also
- 永久挂载 — 网络存储与进程执行的关系