防止ssh终端中途意外中断的工具——screen

字号+ 编辑: 国内TP粉 修订: 种花家 来源: 2025-03-27 我要说两句(0)

常常担心终端连接断开导致编译或者后台命令中途断线退出, 怎么办?

这个问题困扰一些新手。这里推荐使用这个screen工具, 根据笔者理解, 它就是通过保存终端连接的会话临时存储为session来实现的终端会话持久化。

用yum或apt工具安装screen

# centos系列用这个命令安装
yum install screen
# debian或者乌班图用apt工具来安装
apt-get install screen

screen使用方法

创建一个终端会话:

screen -S 这里填写会话名称

这个命令也可以省略到-S, 此时会建立一个随机名称的终端会话。

列举出现在所有的session会话

screen -ls

恢复一个终端会话

screen -r 之前你创建过的会话名称

销毁一个终端会话的方法

如果正在会话里:
Ctrl+a 然后按 Ctrl+d 也就是detach的简写

用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


 

阅完此文,您的感想如何?
  • 有用

    198

  • 没用

    4

  • 开心

    16

  • 愤怒

    7

  • 可怜

    3

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.Q群: 2702237 13835667

相关课文
  • 防止退出linux终端退出之后导致的nohup进程强制退出

  • Linux系统下word文档转成pdf的办法

  • ubuntu和debian安装nginx或者tengine报错, 找不到pcre依赖库的解决办法

  • linux终端下借助awk命令查询筛出网站access.log日志里的统计信息

我要说说
网上嘉宾点评