这个问题困扰一些新手。这里推荐使用这个screen工具, 根据笔者理解, 它就是通过保存终端连接的会话临时存储为session来实现的终端会话持久化。
用yum或apt工具安装screen
# centos系列用这个命令安装 yum install screen # debian或者乌班图用apt工具来安装 apt-get install screen
screen使用方法
创建一个终端会话:
screen -S 这里填写会话名称
这个命令也可以省略到-S, 此时会建立一个随机名称的终端会话。
列举出现在所有的session会话
screen -ls
恢复一个终端会话
screen -r 之前你创建过的会话名称
销毁一个终端会话的方法
用screen -ls拿到会话列表, 并用kill命令+进程号的方式杀死列表里对应的会话进程。
会话session明明存在, 但无法用screen -r来恢复
假如你之前强行关闭了screen有关的终端窗口, 会导致名为screen -r xxxx的命令进程仍然在系统进程表里, 此时这个session id会被screen认为是“被占用”的。
你打开两个终端窗口,其中一个窗口连着screen, 另一个窗口也尝试用screen -r命令同时访问这个会话, 也可以复现这个故障。报错如下:
There is a screen on: XXXX.pts-n.xxxxxxxxxx (01/01/03 xx:xx:xx)(Attached) There is no screen to be resumed matching XXXX.
解决问题的方法是加一个参数-d, 强行销毁之前的会话, 以介入你的目标会话:
screen -r -d <会话ID>
除了screen以外, 也有一个比较方便的实现单个命令挂起到后台的方法, 让你不必担心退出终端影响命令的执行, 叫做disown, 传送门 https://www.wkwkk.com/articles/d09914ce12105ae6.html
screen会话session无法显示中文, 全是乱码问号
编辑器编辑.screenrc文件
vim ~/.screenrc
替换内容如下
defutf8 on defencoding utf8 encoding UTF-8