当我们SSH 登录远程服务器,打开一个远程窗口执行命令,网络中断再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。最常见的就是使用vscode连接远程服务器跑的深度学习任务,自己的电脑中途断网了再次登录找不到上一次执行的命令。
为了解决这个问题,即将会话与窗口"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。这时就需要用到Tmux这个会话与窗口的"解绑"工具,将它们彻底分离。
Tmux是一个终端复用器,允许在单个终端窗口中创建多个会话,并在这些会话之间进行切换。它提供了一种在终端中同时运行多个命令和应用程序的灵活方式。
Tmux的一些主要功能包括:
终端分割:可以将终端窗口分割成多个窗格,每个窗格可以显示不同的命令行界面。
会话管理:可以创建和管理多个会话,每个会话可以包含多个窗口和窗格。这对于同时处理多个任务或在不同项目之间切换非常有用。
远程访问:Tmux支持远程访问,这意味着可以在不同的机器上创建和管理会话,而无需实际物理登录到这些机器。
窗口和窗格管理:可以在会话中创建、关闭、重命名和切换窗口,以及在窗格之间移动、调整大小和复制内容。
会话持久性:即使关闭了终端窗口,Tmux仍然会保持会话的状态,可以重新连接到之前的会话并继续您的工作。
Tmux提供了丰富的命令行选项和快捷键,用于管理和操作会话、窗口和窗格。它是一种强大而灵活的工具,特别适用于需要同时运行多个命令行任务的开发人员、系统管理员和远程工作者。
1.安装tmux:sudo apt install tmux
2.启动tmux会话:在终端中运行tmux
命令启动一个新的tmux会话,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
3.在tmux会话中运行深度学习命令,例如:python run.py with data_root="arrows_root/" num_gpus=1 num_nodes=1 task_finetune_irtr_coco_randaug per_gpu_batchsize =4 load_path="vilt_200k_mlm_itm.ckpt"
4.分离会话:按下Ctrl + b
,然后按d
或者直接输入tmux detach
命令将当前会话与窗口分离。这样,深度学习任务将在后台继续运行。
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。
5.重新连接到服务器,在终端中运行tmux attach
来重新连接到之前的tmux会话;如果有多个会话,连接到特定会话:tmux attach-session -t <会话编号>
;关闭特定会话:tmux kill-session -t <会话编号>
,会话编号就是tmux ls
显示的前面的0,1,2。
6.输入exit
命令,退出当前的shell会话,并终止正在运行的进程。
tmux ls
或tmux list-sessions
命令可以查看当前所有的 Tmux 会话。
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效,以上的命令基本满足日常使用,更详细的可以参考这里。