最常用最稳妥的是nohup command > output.log 2>&1 &,它使程序忽略sighup信号、后台运行并重定向输出;需交互时用screen或tmux创建可重连会话;前台程序可用ctrl+z、bg、disown补救。

直接用 nohup + & 是最常用、最稳妥的做法。它让程序忽略终端断开信号(SIGHUP),同时丢到后台执行,适合绝大多数场景。
nohup 命令:简单可靠的基础方案
nohup 的核心作用是让程序对挂断信号“免疫”,配合 & 就能实现真正脱离终端的后台运行。
- 基本写法:
nohup your_command > output.log 2>&1 & -
nohup拦截 SIGHUP,避免进程被终端退出杀死 -
> output.log把标准输出存进日志文件,不刷屏也不丢失 -
2>&1把错误输出也合并进同一日志,方便排查问题 -
&让命令立刻返回提示符,不阻塞当前终端
screen:需要交互或随时查看进度时用
如果你要跑的是带输出、需中途观察或偶尔干预的任务(比如训练模型、实时日志滚动),screen 更合适——它创建独立会话,断开后可重新连接。
- 新建会话:
screen -S mytask - 在会话中运行你的程序(如
python train.py) - 按
Ctrl+A再按D分离会话(程序继续运行) - 下次登录后用
screen -r mytask重新接入,就像没离开过一样
tmux:多任务/分屏管理进阶选择
功能比 screen 更强,支持窗口、面板、快捷键绑定,适合同时维护多个长期任务。
- 新建会话:
tmux new -s work - 运行程序后,按
Ctrl+B再按D分离 - 恢复会话:
tmux attach -t work - 支持竖切/横切面板,一边看日志一边查进程,效率更高
补救已运行的前台程序
如果程序已经在前台跑着,又不想中断重来,可以临时“拯救”:
- 先按
Ctrl+Z暂停它,变成暂停状态作业 - 运行
bg让它在后台继续执行 - 再执行
disown -h %1(%1 是作业编号,可用jobs查看),让它不再受终端退出影响











