当前位置: 首页 > news >正文

Screen终端管理工具

文章目录

  • Screen终端管理工具
    • 背景
    • nohup介绍
    • screen介绍
      • 安装screen
      • 查看终端
      • 新建终端
      • 退出终端
      • 进入终端
      • 删除会话
      • 帮助命令
  • 总结

Screen终端管理工具

背景

对大佬只有膜拜,可能永远无法超越,在工作交接中大佬用到了一个screen启动了程序,这是什么?我只知道这是中文"屏幕"的意思,难不成还有个软件?果不其然,那就是个软件,大佬给我演示了一波,看了看神奇的效果,但最后还是没有记住,下面咱们一起研究研究,希望在适合的场景中能用到它。
有些场景是我们正在运行程序,但又不能让会话断掉,那么这个怎么处理呢?一般情况下是采用的后台运行 nohup 命令 & 运行,这也是一种方法,有没有其他的方式呢,但有些场景是需要交互的,对于这种场景来说nohup就没有那么好用了。

screen是linux下的一种视窗多重复用管理程序。在使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。来自百度百科

nohup介绍

nohup 运行免受挂断影响的命令,输出到非终端设备,将显示的内容输出到nohup.out文件中。

以下面一段死循环的python代码为例

import timen = 100
sum = 0
counter = 1
while counter <= n:
# while True:time.sleep(1)sum = sum + countercounter += 1print("Hello World",counter)
print("1 到", n, "相加的和:", sum)

终端执行命令,输出结果集

[wdq@WDQCVM darren]$ python3 HelloWord.py
Hello World 2
Hello World 3
Hello World 4
Hello World 5
Hello World 6
Hello World 7
Hello World 8
Hello World 9
Hello World 10
Hello World 11
1 到 10 相加的和: 55
[wdq@WDQCVM darren]$ 

nohup 运行程序

[wdq@WDQCVM darren]$ nohup python3 HelloWord.py 
nohup: ignoring input and appending output to ‘nohup.out’

不在终端运行,nohup 运行,当程序结束时将日志输出到nohup.out,但不能满足后台运行

nohup且后台(&) 运行程序

[wdq@WDQCVM darren]$ nohup python3 HelloWord.py &
[1] 12877
[wdq@WDQCVM darren]$ nohup: ignoring input and appending output to ‘nohup.out’

这种场景是后台运行的,运行过程中不会自动刷新日志

当程序运行结束后输出日志

[wdq@WDQCVM darren]$ more nohup.out 
Hello World 2
Hello World 3
Hello World 4
Hello World 5
Hello World 6
Hello World 7
Hello World 8
Hello World 9
Hello World 10
Hello World 11
1 到 10 相加的和: 55

nohup 还可以将日志重定向到其他路径,也可以扔掉不要

nohup python3 HelloWord.py  > FILE &
nohup python3 HelloWord.py  > /dev/null &

属于系统自带的,不要重新安装,使用方法简单,使用简单但功能也是比较简单,不支持实时刷新日志信息。

screen介绍

安装screen

以下是在Centos7.9版本进行演示的

yum install screen 

查看终端

[wdq@WDQCVM darren]$ screen -ls
No Sockets found in /var/run/screen/S-wdq.
[wdq@WDQCVM darren]$ 

新建终端

# 新建终端 screen -S 名称
[wdq@WDQCVM darren]$ screen -S hello
[wdq@WDQCVM darren]$ python3 HelloWord.py
Hello World 2
Hello World 3

退出终端

Ctrl+a+d

再次查看终端

[wdq@WDQCVM darren]$ screen -ls
There is a screen on:14369.hello     (Detached) # 已分离
1 Socket in /var/run/screen/S-wdq.
[wdq@WDQCVM darren]$ 

进入终端

进入原来终端,刚才的东西原样存在

screen -r 进程号或者screen -r 名称均可

[wdq@WDQCVM darren]$ screen  -r hello
[wdq@WDQCVM darren]$ python3 HelloWord.py
Hello World 2
Hello World 3
Hello World 4
Hello World 5
Hello World 6
Hello World 7
Hello World 8
Hello World 9
Hello World 10
Hello World 11
1 到 10 相加的和: 55
[wdq@WDQCVM darren]$ 

退出窗口切不可ctrl+z,这种强制退出,会将程序也一同终止。

创建一样名字的会话

[wdq@WDQCVM darren]$ screen -S hello2
[wdq@WDQCVM darren]$ screen -ls
There are screens on:15795.hello2    (Detached)15672.hello2    (Detached)14369.hello     (Detached)
3 Sockets in /var/run/screen/S-wdq.[wdq@WDQCVM darren]$ screen -d -r hello2
There are several suitable screens on:15795.hello2    (Detached)15672.hello2    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[wdq@WDQCVM darren]$ 

这时候要填写完整名称进入会话

[wdq@WDQCVM darren]$ screen -d -r  15795.hello2
[wdq@WDQCVM darren]$ 

对比带-d和不带的区别

screen -r session_name
screen -d -r session_name

如果只需要重新连接到已存在的会话而不需要分离当前会话screen -r session_name
如果需要分离当前会话并进入目标会话,则可以使用 screen -d -r session_name

删除会话

删除会话screen -X -S session_name quit

[wdq@WDQCVM darren]$ screen -ls
There are screens on:15795.hello2    (Attached)15672.hello2    (Detached)14369.hello     (Detached)
3 Sockets in /var/run/screen/S-wdq.
[wdq@WDQCVM darren]$ screen -X -S 15795.hello2 quit 
[screen is terminating]
[wdq@WDQCVM darren]$ 
[wdq@WDQCVM darren]$ screen -ls
There are screens on:15672.hello2    (Detached)14369.hello     (Detached)
2 Sockets in /var/run/screen/S-wdq.
[wdq@WDQCVM darren]$ 

screen的快捷键居多,详细使用请查看进行使用

帮助命令

man --help
man screen 

总结

要想善其事、必先利其器用到哪个工具后要先学会基本使用,然后去研究官方文档。然后就是必须在测试环境进行使用熟练了以后再在生产环境使用。有些时候要改掉一些习惯,比如我喜欢使用ctrl+z退出终端,那果断不可取。

http://www.lryc.cn/news/129342.html

相关文章:

  • 【python自动化办公】PysimpleGUI官网案例全部项目代码文件及运行截图
  • 9.处理this和防抖、节流
  • Spark操作Hive表幂等性探索
  • 【可变形卷积3】 DCNv2 安装
  • 归并排序 与 计数排序
  • 机器学习之逻辑回归
  • 操作符详解上(非常详细)
  • React 高阶组件(HOC)
  • 【NepCTF2023】复现
  • 大文件切片上传
  • ubuntu切换python版本
  • docker 安装 elasticsearch、kibana 7.4.2
  • 【es6】函数参数设置默认值
  • Pytest和Unittest测试框架的区别?
  • C#基础知识(一)
  • 我还不知道?Android组件化插件化模块化
  • 借助 AI 工具,真的能成为 10x 工程师?
  • TypeScript 面向对象
  • k8s 中快速启动curl pod 做api test
  • 神经网络基础-神经网络补充概念-56-迁移学习
  • 力扣:65. 有效数字(Python3)
  • 003-Spring boot 启动流程分析
  • 中间件的介绍
  • LVS-DR模式下(RS检测)ldirectord工具实现部分节点掉点后将请求发往正常设备进行处理
  • c++游戏制作指南(四):c++实现数据的存储和读取(输入流fstream)
  • 如何使用CSS实现一个响应式视频播放器?
  • Typora上传文件到Gitee
  • 系统架构设计师---2017年下午试题1分析与解答(试题三)
  • 从零搭建vue + element-plus 项目
  • 原码、补码、反码