nohup配合&可使程序在ssh断开后持续运行,其原理是忽略sighup信号并脱离终端;需重定向输出(如>log 2>&1)避免日志混乱;验证用ps/grep,管理用tail/kill;交互式需求应选screen或tmux。

用 nohup 配合 & 就能确保程序在 SSH 断开后继续运行,核心是让进程忽略挂断信号(SIGHUP),并脱离当前终端会话。
nohup & 的基本用法
直接在命令前加 nohup,末尾加 &:
nohup python3 app.py &nohup ./start.sh &
这样执行后,程序会立即转入后台,且不再受终端关闭影响。系统会提示类似 appending output to nohup.out,说明输出已自动写入当前目录的 nohup.out 文件。
必须重定向输出,避免日志混乱
默认的 nohup.out 容易被多个命令覆盖,建议显式指定日志文件:
-
nohup python3 server.py > server.log 2>&1 &(标准输出和错误都写入server.log) nohup bash deploy.sh > /var/log/deploy.log 2>&1 &
其中 2>&1 表示把标准错误(stderr)也合并到标准输出(stdout)中,再一起重定向,这是防止错误信息丢失的关键操作。
验证和管理后台进程
SSH 断开后再登录,无法用 jobs 查看(它只显示当前 shell 的作业),得用系统级进程命令:
- 查进程:
ps aux | grep "python3 app.py" | grep -v grep - 查日志:
tail -f server.log实时跟踪运行状态 - 结束进程:
kill $(ps aux | grep "app.py" | grep -v grep | awk '{print $2}'),或先用ps找到 PID 再kill PID
什么情况下 nohup 不够用?换 screen 或 tmux
如果需要中途重新连接、交互式操作(比如按 Ctrl+C 中断、查看实时输出、多窗口切换),nohup 就不合适了:
- 新建会话:
screen -S mytask - 运行程序:
python3 app.py - 分离会话:
Ctrl + A,松手后按D - 重新连接:
screen -r mytask
screen 和 tmux 能真正“保存会话状态”,而 nohup 只是静默守护——适合简单、无需干预的长期任务。











