防止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.交流群: 2702237 13835667

相關課文
  • 防止退出linux終耑退出之後導致的nohup進程強制退出

  • Linux系統下word文档轉成pdf的辦法

  • ubuntu和debian安裝nginx或者tengine報錯, 找不到pcre依賴庫的解決辦法

  • linux終耑下借助awk命令查詢篩出網站access.log日志裡的統計信息

我要說說
網上賓友點評