教程

SSH 断开后让进程继续运行(tmux、nohup)

关闭 SSH 会用 SIGHUP 杀掉你跑的命令。把它跑在 tmux 或 screen 里以保活并稍后重新挂上,或用 nohup 启动后不管。为什么这在移动端(连接会断)加倍重要。

CC Chen Chen· 创始人·2026 年 6 月 14 日·阅读 5 分钟

断开后让进程继续运行

默认情况下,关闭 SSH 会话会杀掉你在里面启动的东西。要让命令在你断开后继续运行,把它启动在一个终端复用器里——tmux(或 screen),这是最好、最灵活的选项。一次性的话 nohup … & 也行。在移动端这一点加倍重要:切网络或 App 退后台时连接会断,分离与否就是"丢任务"和"不丢"的区别。

为什么会死

你的 SSH 会话结束时,shell 给它的子进程发 SIGHUP("挂断"),多数就退出了。修法是把进程跑在一个能挺过会话的地方——一个分离的 tmux/screen 会话,或一个被明确告知忽略挂断的进程。

最好的办法:tmux

tmux 让一个 shell 在服务器上独立于你的连接存活。启动它、跑你的活、分离、断开——活继续。稍后你正好从离开处重新挂上。

tmux                      # 启动一个会话
# … 跑你的长命令 …
# 分离:按 Ctrl-b 再按 d
# 现在可以安全断开

# 稍后重连后:
tmux attach               # 正好回到你离开处

有多个会话:tmux ls 列出,tmux attach -t 0 选一个。screen 是更老的等价物(screen,分离 Ctrl-a d,重挂 screen -r)——装了哪个用哪个。

快速的办法:nohup

对一条你只想启动后离开的命令:

nohup ./long_job.sh > job.log 2>&1 &

nohup 让进程忽略挂断,& 放后台,重定向把输出存到文件(因为没有终端可打印)。稍后用 tail -f job.log 看进度。已经启动了才想起来?disown -h %1 把最近的后台任务从 shell 分离,让它存活。

该用哪个?

你想…
回来还要和会话交互tmux / screen
启动后不管,稍后看日志nohup … &
保住一个已启动的任务disown

为什么这在移动端必不可少

在手机上,连接天生脆弱:你走出 Wi-Fi 范围、切到蜂窝、或长等待时 OS 挂起 App——普通 SSH 会话(和它跑的命令)就死了,常带一个 broken pipe。跑在 tmux 里就让掉线成了无关紧要的小事:活在服务器上继续跑,你重连后 tmux attach 重新挂上。再配一个稳定地址(Tailscale),重连就是一点。这是让手机管理可靠的习惯。

TermAI 在手机上建议一条 tmux 命令
在手机上,把长任务跑在 tmux 里意味着掉线不杀任务——重连后重新挂上。不确定命令时 AI 能替你配好。

常见问题

怎么在关闭 SSH 后让进程继续运行?
把它启动在 tmux(或 screen)里,Ctrl-b 再 d 分离,然后断开——进程继续跑。稍后 tmux attach 重新挂上。一次性的用 nohup command &

tmux 和 nohup 有什么区别?
tmux 让一个可重新挂上的交互会话存活;nohup 只是启动一条忽略挂断、后台运行的命令。想回到会话就用 tmux。

已经启动了一条命令,能保住吗?
能:disown -h %1 把一个运行中的后台任务分离、让它挺过会话。(它得已经在后台——用 Ctrl-z 再 bg,或以 & 启动。)

为什么移动端 SSH 一断我的任务就死?
断开的会话给进程发 SIGHUP。跑在 tmux 里让它们独立于连接——在掉线常见的移动端必不可少。

快速事实

  • 为何会死:关闭 SSH 给子进程发 SIGHUP
  • 最好:跑在 tmux 里——分离(Ctrl-b d)、断开、稍后 tmux attach
  • 快速:nohup command > log 2>&1 & 启动后不管
  • 已在跑:disown -h %1 保住它
  • 移动端:tmux 把掉线变成无关紧要的小事
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog