使用终端复用器 Tmux 解绑终端与会话

对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。感兴趣的朋友可以搜索“里先森sements”来关注,欢迎来玩~!


本文介绍了一种 Linux 环境下常用的终端复用器 Tmux 的简要使用方法,非常适用于要在别处监控实验室训练机实时输出的场景。在编写过程中,以下文献给予了我很大的帮助:

  • Tmux 使用教程 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2019/10/tmux.html
  • linux tmux 使用教程 - 牛奔 - 博客园: https://www.cnblogs.com/niuben/p/15983908.html
  • Home · tmux/tmux Wiki · GitHub: https://github.com/tmux/tmux/wiki

设想一个这样的场景,你在实验室里通过终端(terminal)与服务器构建了一个会话(session),并且在服务器上运行起了一个进程(process),但这个进程非常耗时。等回到了家,虽然能够顺利的与服务器构建会话,却无法查看在实验室终端上才能看到的进程输出信息。这是因为默认的终端与会话绑定机制使得其他终端无法接替并监视现有的会话。为此,我们可以借助终端复用器(terminal multiplexer)中会话与终端的解绑与重新绑定( detach and reattach sessions from a terminal )。

Tmux 便是一个常用的终端复用器,利用它可以很轻松的实现上述功能。任何已经在 Tmux 中构建的会话将由 Tmux 托管,即使在终端与会话解绑后,该会话下的进程依旧能够正常的运行。并且,你可以在任意的终端上重新与现有会话进行绑定,获取该会话下进程的输出信息。这十分适用于在实验室调用服务器运行长时间工作的进程时,回家查看这个进程的情况。

由于我们侧重于使用终端复用器的解绑与绑定功能,因此下面仅简单介绍了 Tmux 的部分使用方法。更多说明请参考官方Wiki(Home · tmux/tmux Wiki · GitHub: https://github.com/tmux/tmux/wiki)。

新建会话

新建一个 Tmux 会话,可以通过 tmux new 来新建拥有指定名称的 Tmux 会话,这会在当前终端启动一个 Tmux 窗口。

# 新建 Tmux 会话
$ tmux new

# 新建一个指定名称的 Tmux 会话
$ tmux new -s 指定的会话名称

分离会话

在 Tmux 窗口中,按下 Ctrl+b ,松开后再按 d 键,或者输入 tmux detach 就可以将当前会话与终端分离。

# 分离(解绑)当前终端与会话
$ tmux detach

分离后,会退出当前的 Tmux 窗口,但是之前在 Tmux 会话中启动的进程仍然会在后台运行。

查看会话

在 Linux 终端中,可以输入 tmux ls 来查看当前 Tmux 托管的所有会话

$ tmux ls
# 或者
$ tmux list-session

接入会话

使用 tmux attach 命令可以将当前的终端重新接入(绑定)某个已经存在的 Tmux 会话

# 使用会话编号
$ tmux attach -t 0
# 使用会话名称
$ tmux attach -t 指定的会话名称
# 加入最近使用的会话
$ tmux attach

事实上,即使之前的某个终端未与当前会话进行分离,新终端依旧可以加入这个会话。如果你希望绑定会话时断开其他终端对这个会话的绑定,可以使用 -d 标志。

杀死会话

如若要杀死 Tmux 中的某个会话,可以使用 tmux kill-session 来指定杀死的会话,使用 exit 可以杀死当前 Tmux 会话。

# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t 指定的会话名称

# 杀死当前会话
$ exit

简单操作流程

例如,我们在服务器上新建了一个 Tmux 会话,并在其上运行了某个耗时程序

# 新建 Tmux 会话 serverlinux
$ tmux new -s serverlinux

# 在 serverlinux 中运行耗时程序(开始炼丹)
$ python train.py

当我们回到家时,我们可以通过 SSH 链接到服务器,并将当前终端与之前的会话绑定,来查看任务输出

$ tmux attach -t serverlinux

使用tmux detach可以解绑会话与当前终端,如若想远程关闭这个会话,我们则可以使用 exit

如若你希望每次登录服务器后,终端上弹出信息提醒你新建 Tmux 会话,可以参考我的这篇文章:Linux登录终端时显示信息,使用toilet显示杀马特字体

你可能感兴趣的:(解决生活小困难,Linux,linux,服务器,运维)