nohup可以实现后台运行,但这种无法实现“重新登陆到之前的 shell 会话”。因为它没有会话,只有进程,所以只能通过ps -e | grep -e 'PID' -e 'xxx'找到进程。
# 仅保持进程运行,无法重新连接交互界面
nohup python3 long_running_task.py > output.log 2>&1 &
终端复用器
在ssh连接bash后:
- 如何实现 exit ssh连接后,指定应用还在会话里运行?
- 如何重新登陆到 之前 exit 的shell会话里?
解决方案:终端复用器。标准的 ssh 连接断开后,其分配的伪终端(pty)和所有子进程(包括你的应用)默认都会收到 SIGHUP 信号而终止。要让应用脱离 SSH 会话独立运行,并能随时“重新连接”回原来的会话环境,就需要用到 screen 或 tmux 这样的工具。
$ sudo apt install tmux # 基本默认安装了
# 1. SSH 登录后,创建新会话
$ tmux new -s myapp
# 2. 运行应用
$ python3 long_running_task.py
# 3. 分离会话
# 按住 Ctrl 键,依次按 B 键,然后按 D 键
此时,你可以安全地输入 exit 断开 SSH 连接。 服务器上的 screen 或 tmux 进程会作为守护进程继续运行,其中的应用也会持续执行。
当你再次通过 SSH 连接到服务器后,只需重新附着(attach)到之前创建的会话即可。
# 列出所有 tmux 会话
$ tmux ls
myapp: 1 windows (created ...)
# 重新连接
$ tmux a -t myapp
tmux 使用
会话:新建/查看/转后台/进入/关闭
$ tmux # 新建无名会话,并进入
$ tmux new -s viewLog # 新建指定会话名,并进入;
# 新建后台会话(不进入):tmux new -s 会话名 -d
$ tmux ls # 查看会话,:前面的是会话名,下面示例是0与viewLog
0: 1 windows (created Wed Jul 29 19:14:05 2026)
viewLog: 1 windows (created Wed Jul 29 19:44:32 2026) (attached)
# 分离会话,转到后台运行:按住 Ctrl + B + D 键
$ tmux a -t 会话名 # 进入现有会话,在进入会话后,在底部有一个绿条,最左侧是会话名

三种关闭会话,推荐第一种
$ exit # 在会话内部,正常退出窗口,最后一个窗口退出则会关闭会话;
$ tmux kill-session # 在会话内部,强制杀死当前会话
$ tmux kill-session -t viewLog # 在会话外部,强制杀死指定会话
$ tmux kill-server # 关闭所有 tmux 会话
会话内:会话、窗口与窗格
三层结构:Session(会话) → Window(窗口) → Pane(窗格)
- Session(会话)= 浏览器,你可以电脑打开多个会话;
- 不同会话之间:环境变量、当前路径、后台任务完全隔离。
- 窗口(Window) = 浏览器里的一个标签页(整个屏幕只显示一个内容)。
- 同一会话内的不同窗口:共享同一个 tmux 后台进程,但每个窗口有自己独立的 Shell 环境(可以分别
cd到不同目录,互不干扰)。
- 同一会话内的不同窗口:共享同一个 tmux 后台进程,但每个窗口有自己独立的 Shell 环境(可以分别
- 窗格(Pane) = 在这个标签页里,把屏幕切割成好几块(左右分屏、上下分屏)。
- 窗格依附于窗口存在,但不同的窗格,能运行不同程序
前缀键/prefix:默认 Ctrl + b(先按这组,再按后面命令)
| 会话管理 | 窗口管理 | 切换窗口 |
|---|---|---|
– prefix + $:重命名当前会话 | – prefix + c:新建窗口 | – prefix + p:上一个窗口 |
– prefix + s:列出并切换会话 | – prefix + ,:重命名当前窗口 | – prefix + n:下一个窗口 |
– prefix + &:关闭当前窗口 | – prefix + 0~9:切换到对应编号窗口 | |
– prefix + w:预览选择窗口 |
| 窗格新增分屏 | 切换窗格 | 调整布局 |
|---|---|---|
– prefix + %:垂直分屏 | – prefix + 方向键:切换上下左右窗格 | – prefix + z:当前窗格全屏/恢复 |
– prefix + ":水平分屏 | – prefix + o:循环切换窗格 | – prefix + 空格:循环切换预设布局 |
– prefix + ;:切换到上一个窗格 | – prefix + !:把当前窗格转为独立窗口 |
窗格分割的切换方法
| 目标布局 | 快捷键(先按 Ctrl+b) | 效果说明 |
|---|---|---|
| 左右并排(水平分割) | prefix 松开后,按 Alt+1 | 所有窗格平均左右排列(一横行) |
| 上下堆叠(垂直分割) | prefix 松开后,按 Alt+2 | 所有窗格平均上下排列(一竖列) |
| 平铺(均匀网格) | prefix 松开后,按 Alt+5 | 自动按比例排成类似“棋盘”的网格 |
其他:复制/滚动/翻页
prefix + [:进入复制/滚动模式- 方向键 / PageUp / PageDown 滚动
- 按
空格开始选择,回车复制
prefix + ]:粘贴prefix + f:在窗格内容中搜索
其他:常用配置(~/.tmux.conf)
# 前缀改为 Ctrl+a(习惯 screen 的人)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix
# 鼠标支持(点击切换窗格/滚动),**使用方便**
set -g mouse on
# 窗口从1开始编号
set -g base-index 1
# 状态栏颜色
set -g status-style bg=black,fg=green
修改后生效:
tmux source ~/.tmux.conf
发表回复
要发表评论,您必须先登录。