Screen的安装与使用

Screen的安装与使用

1. Screen作用

  • Screen是一个非常强大的功能,它可以让你在一个终端窗口中启动多个子窗口,每个子窗口都可以运行不同的程序。这对于需要长时间运行的任务非常有用,比如编译大型项目或者下载大文件。

  • 即使你断开了SSH连接,这些任务也会在服务器上继续运行

    当你进入 screen 会话时,实际上并没有创建一个新的虚拟环境,而是进入了你当前所处的虚拟环境。screen 会话只是一种会话管理工具,它允许你创建多个会话并在它们之间自由切换,但它不会改变你的环境状态。

2. 查看是否已经安装Screen

screen # 方法1:在命令行输入screen,点击回车,如果出现  screen:未找到命令这样的字眼,就是没有安装
which screen # 方法2:输入这句话,点击回车,没有反应,就是没有安装

在这里插入图片描述

3. 安装Screen

注意1:在一个虚拟环境中安装了Screen,其他虚拟环境中是不能使用Screen的。

如果想要在其他的虚拟环境中也使用Screen,那么需要在那个虚拟环境中也安装

注意2:在服务器上运行代码,打开一个节点,比如节点1,建立任务,安装screen,能用了

但是以后你换一个节点运行任务的时候,还得重新安装screen!!!!

# Ubuntu
# 如果你想在某一个虚拟环境中安装screen,首先激活这个虚拟环境conda activate 虚拟环境名字,然后运行下面的命令
apt-get install screen 
# 如果你想在整个系统级别安装screen,无论哪个虚拟环境处于激活状态,运行下面的命令
sudo apt-get install screen

# CentOS
yum install screen
# 我在Ubuntu环境中安装screen过程
apt-get install screen # 安装命令
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  byobu | screenie | iselect
The following NEW packages will be installed:
  screen
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 577 kB of archives.
After this operation, 1022 kB of additional disk space will be used.
Get:1 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 screen amd64 4.8.0-1ubuntu0.1 [577 kB]
Fetched 577 kB in 1s (595 kB/s) 
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package screen.
(Reading database ... 81882 files and directories currently installed.)
Preparing to unpack .../screen_4.8.0-1ubuntu0.1_amd64.deb ...
Unpacking screen (4.8.0-1ubuntu0.1) ...
Setting up screen (4.8.0-1ubuntu0.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.17) ...

4. Screen的使用

创建新的Screen会话

screen -S session_name

其中session_name是你想要命名的会话名称。如果你不提供会话名称,Screen将会创建一个匿名的会话

在Screen会话中进行工作

在这个新的Scr进行你的工作,就像在普通的终端中一样。

screen -r session_name # 进入这个会话

# *************可能遇到问题*****************
# 问题描述:
There is no screen to be resumed matching test2. # test2是session_name
# 解决:
screen -d session_name # 强制分离会话
screen -r session_name # 重新附加

暂时断开screen

Ctrl+A+D # 或者
screen -d # 或者
screen -d <session_name>

当你需要暂时离开时,你可以按住Ctrl键,然后依次按a和d键来断开会话。这样,即使你关闭了SSH连接,会话中的程序也会继续运行

恢复会话

当你回来时,你可以使用以下命令来恢复之前的Screen会话:

screen -r session_name

其中session_name是你之前创建的会话名称。如果你忘记了会话名称,你可以使用screen -ls命令来列出所有的Screen会话

关闭会话

exit # 或者
ctrl+A+D

如果你想要完全结束Screen会话,你可以使用exit命令或者按住Ctrl键,然后依次按AD键来关闭会话

# 一些常用的命令

# 列出所有的screen会话
screen -ls
screen -list
# 结果是这样的:
# screen -ls
#There are screens on:
  #      5524.pts-14.6912f440a175        (2024年04月08日 21时28分40秒)   (Attached)
   #     5508.pts-12.6912f440a175        (2024年04月08日 21时28分27秒)   (Attached)


# 通过screen 进程id, kill掉一个screen
kill -9 session_num # 或者
ctrl +A+K # 杀死当前窗口和窗口中运行的程序
ctrl+A 输入quit命令退出Screen会话。 # 注意:这样退出会杀死所有窗口并退出其中运行的所有程序

'''
# 当进程无法正常终止,使用以下命令
# 当你知道进程的终端设备号时,使用 pkill 来强制终止所有与该设备号相关的进程
pkill -9 -t session_num

'''

# 清理掉所有挂掉(被杀)的screen 
# 杀掉一个screen会话之后记得清理这个挂掉的会话!(我觉得这个清理操作也可以理解成释放)
screen -wipe

# 杀死当前所有的会话
pkill screen

ctrl+A+C # 在当前Screen会话中创建新的窗口
ctrl+A+N # 切换到下一个窗口
ctrl+A+P # 切换到上一个窗口
ctrl+A+D # 断开会话

# 在screen中查看当前处于哪一个screen会话中
'''一般进入screen之后的会话界面是只有一个#,需要自己使用命令ls来看当前处于什么目录下。
但有时候,进入screen之后的界面是和正常终端中一样的,有#和当前所处目录。
所以使用命令echo $STY进行查看当前所处会话
'''
echo $STY

# 注:在进入screen会话之前就进入一个虚拟环境,然后你进入screen会话,这个会话就在这个虚拟环境里面

# 卸载screen
sudo apt-get purge screen 

# *********其他相关命令*************************
# 解释:-d 选项用于将一个附加的 screen 会话分离(detach),使它在后台运行。
# 场景:当你无法附加到一个已经附加的 screen 会话时,可以使用这个命令将会话从当前终端中分离,使其可以重新附加到其他终端。
screen -d -r session_num

# 解释:systemctl 用于控制系统服务。restart 命令会重新启动指定的服务。screen 在这里是假设的服务名,实际服务名可能不同。
# 场景:当 screen 的服务或守护进程出现问题时,重新启动服务可以帮助解决问题。这通常用于系统服务管理的上下文中。
sudo systemctl restart screen


# 解释:rm -rf 用于递归删除文件和目录。/run/screen/S-root 是 screen 会话的存储位置。sudo 是为了获得超级用户权限。
# 场景:当 screen 会话文件出现问题并且无法通过正常方法解决时,可以手动删除存储目录来强制清理。请谨慎使用,因为它会影响所有 screen 会话。
sudo rm -rf /run/screen/S-root



5. Screen的缺点及解决

缺点

  • 1.在其中不能转动鼠标滚轮,否则会出现一些^A 或者^B的东西
  • 2.也不能使用键盘上面的上下左右键,否则也会出现那些东西
  • 3.也不能直接使用ctrl+c/ctrl+v来进行复制粘贴,也会出现那些东西

解决缺点1

  • 方法1:
    通过 Ctrl + A 然后按 [ 或者esc进入复制模式,使用方向键或者滚动查看历史内容。

    在 tmux 中,使用 Ctrl + B 然后 [ 进入复制模式,同样使用方向键来滚动。

  • 方法2:

    因为screen默认是屏蔽滚动条的,所以需要设置一下

    在screen外运行(正常终端中运行):

    echo 'termcapinfo xterm* ti@:te@' >> ~/.screenrc
    

解决缺点3:只能用鼠标右键复制和粘贴

参考文章:

linux screen 命令详解

用screen 在后台运行程序

【Linux】screen的安装与使用

使用过程中问题及解决

使用Screen过程中,可能会遇到一些问题,我遇到了两个问题,已解决,具体请看

使用Screen遇到的问题及解决办法(成功解决)

希望可以为您遇到的问题提供解决思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seasonsyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值