文档首页> 技术教程> nohup、screen、tmux:断开后让命令继续跑

nohup、screen、tmux:断开后让命令继续跑

发布时间:2026-07-29 13:17        更新时间:2026-07-30 06:03
跑长任务时断网、下班关电脑,SSH 一断线,前台进程往往跟着被杀。想让命令在你离开后继续跑,常用的工具有三件:nohup、screen、tmux。它们机制并不一样,选错工具,任务照样丢。 ## 机制上的差别 SSH 断开时,系统会向会话内的进程发送挂断信号(SIGHUP),多数程序收到就退出。nohup 让命令忽略这个信号,配合 & 放到后台,输出默认写进当前目录的 nohup.out。它最简单,但断线后你无法再回到那个终端看进度,只能翻日志。 screen 和 tmux 属于终端复用器,本质是常驻后台的 server 替你持有伪终端,SSH 断了也不受影响。重新连接、attach 回去,画面原样还在,不仅能看输出,还能继续交互,适合 vim、top 这类全屏程序。 归纳成三个对比维度:能否重连、能否多窗口、能否多人共用。nohup 只解决"不被杀";screen 和 tmux 两者都行,tmux 的分屏与脚本化配置更灵活,screen 胜在几乎所有老系统预装。多人共同值守一个任务时,tmux 的会话还能两人同时接入,看到同一画面,交接班很方便。场景对号入座:预计跑四小时的数据迁移,nohup 一条命令最省事;要边跑边看进度、偶尔调参数,就进 tmux。 ## tmux 基本操作 ``` tmux new -s work # 新建名为 work 的会话 tmux ls # 列出会话 tmux attach -t work # 重新接入 ``` 会话内按 Ctrl+b 再按 d 分离;Ctrl+b c 新建窗口,Ctrl+b 0/1 切换;Ctrl+b % 左右分屏,Ctrl+b " 上下分屏。记住这几组,日常够用。配置文件在 ~/.tmux.conf,把前缀键、鼠标支持改成顺手的样子,是长期使用者的必经一步。 ## 日志怎么落地 交互任务靠 tmux 还不够,重要任务建议输出留底: ``` nohup python3 task.py > /var/log/task_$(date +%F).log 2>&1 & ``` 2>&1 把标准错误合并进同一个文件,按日期命名一天一个,配合 cron 定期清理,日志不会越积越大。路径写绝对路径,避免下次找不到。任务是否还活着,用 ps -ef | grep 任务名 确认,别只凭感觉判断。 一句话收尾:临时跑一条命令,nohup 足够;要盯着改、要分窗口,装个 tmux 更省心。另提醒,机器本身负载高时,后台任务并不会跑得更快,资源不够照样排队。