博客
关于我
linux 技巧:使用 screen 管理你的远程会话
阅读量:790 次
发布时间:2023-02-01

本文共 1940 字,大约阅读时间需要 6 分钟。

在Linux/Unix环境中,关闭SSH终端窗口或断开网络连接会导致正在运行的程序或会话被终止的原因在于SIGHUP(挂断信号)。这种信号默认的行为是终止当前会话的前台进程组,从而导致远程会话被中断。在许多场景中,尤其是在执行长时间运行的任务(如系统备份、文件传输等)时,这种行为会造成不小的麻烦。要避免这种问题,我们可以通过使用screen或者类似的终端多路复用工具来管理远程会话,确保程序能够继续运行且不会因信号而被终止。

SIGHUP信号的作用

在POSIX.1规范下,当终端接口检测到网络连接断开或控制终端关闭时,会向会话期的控制进程发送SIGHUP信号。控制进程是会话的首进程,其关注的是与终端交互的前台进程组。默认情况下,SIGHUP信号会导致控制进程终止,从而终止整个会话期。这个机制可能导致正在运行的程序或会话被立即终止,尤其是在长时间运行的任务中,这种中断可能会带来不稳定性或数据丢失。

screen:终端多路复用的强大工具

为了避免因SIGHUP信号中的断开而导致的程序中断,我们可以使用screen(GNU Screen)这个强大的终端多路复用工具。screen允许我们在一个物理终端或用户界面上创建多个独立的窗口,就像在使用多个SSH终端窗口一样,但又可以管理在后台运行的会话。screen提供了多种功能,可以满足我们在远程环境中管理长时间运行任务的需求。

使用screen管理远程会话

方法一:直接使用screen启动新窗口

screen创建一个全屏的终端窗口,然后在其中执行所需的任务。例如:

screen

这将打开一个全屏的 bash shell窗口。你可以在其中使用任何命令或脚本,如:

screen ftp files.example.com

如果你想将窗口切换到另一个任务(如编辑文档),你可以在任何时候键入 C-a c(Ctrl+a,a)切换到新窗口。

方法二:指定命令并后台运行

也可以通过screen直接指定要执行的命令并后台运行:

screen mycommand &

这将启动mycommand命令,并将其输出重定向到屏幕上。你可以在同一时间继续执行其他任务。

方法三:配置screen以启动多个窗口

如果你需要在同一个screen会话中管理多个任务,可以在screen窗口中使用快捷键切换至新的窗口。例如:

  • 创建一个窗口并运行ftp:

    screen ftp files.example.com
  • 进入ftp窗口后,按下 C-a c(Ctrl+a,a)创建一个新窗口,并运行top:

    C-a cscreen top
  • 退出ftp窗口后,键入 C-a c切换回top窗口,再键入 C-a d暂时断开screen会话。

  • Screen的高级功能

    screen提供了强大的定制能力,可以满足更复杂的需求:

  • 定义命令字符和转义字符:可以通过-e选项设置自己的命令字符和转义字符,例如:

    screen -e^t

    这会将Ctrl+t视为命令字符,t为转义字符。

  • 输入加密:可以选择是否启用输入加密,确保远程会话的安全性。

  • 多用户模式:screen默认是单用户模式,但可以通过配置文件开启多用户模式,以支持多个用户同时连接到同一会话。

  • 会话保存和恢复:可以将screen会话暂时断开,而不终止运行中的程序。断开后,可以通过screen -r重新连接会话。

  • ###.screen的常用命令

    • screen -ls:列出所有可用的screen会话。
    • screen -r [pid].tty.host:重新连接特定的screen会话。
    • screen -d:断开当前screen会话。
    • screen -m:启动一个以断开模式开始的screen会话,可以后续重新连接。
    • screen -w:启动一个全屏的screen窗口。

    作用范围

    screen最主要的作用是为我们提供一个能够在多个进程之间切换的终端窗口管理器。这类似于传统的SSH终端,但带有更多功能。特别是在远程备份、文件传输等任务中,screen能够帮助我们避免因网络中断而中断任务的烦恼。

    screen的配置和优化

    为了充分利用screen的功能,可以参考其文档进行配置。screen的默认配置通常已经足够,即$HOME/.screenrc,但你可以根据需求进行定制。例如,可以配置screen以自动启动特定的窗口或设置默认的显示选项。

    结论

    使用screen来管理远程会话可以有效避免因SIGHUP信号而导致的程序终止问题。无论是需要长时间运行的批处理任务,还是需要同时管理多个远程任务的交互式工作,screen都可以提供灵活而强大的解决方案。仅仅需要记住screen的快捷键和命令,就能充分发挥其潜力。

    转载地址:http://elwfk.baihongyu.com/

    你可能感兴趣的文章
    Linux —— 线程同步
    查看>>
    Linux 上 Python 中的环境变量
    查看>>
    Linux 上传下载 rz 与sz
    查看>>
    linux 上定时任务执行shell脚本
    查看>>
    Linux 上查看和刷新 DNS 缓存
    查看>>
    Linux 上的 dig 和 nslookup 命令
    查看>>
    linux 下 php 安装 libevent
    查看>>
    Linux 下 `/etc/limits.conf` 文件中的配置详解:`* soft nofile 65535` 和 `* hard nofile 65535` 以及 `* soft nproc
    查看>>
    Linux 下DNS详解
    查看>>
    Linux 下PHP扩展开发系列:二. 一个典型的扩展开发
    查看>>
    linux 下使用isign 签名ipa包
    查看>>
    linux 下安装php扩展
    查看>>
    linux 下安装redis并设置开机自启动
    查看>>
    Linux 下查看java进程
    查看>>
    linux 下查看机器配置命令
    查看>>
    Linux 下格式化新磁盘、挂载新磁盘,并且实现开机自动启动
    查看>>
    linux 下监控进程流量情况命令 NetHogs
    查看>>
    Linux 下编写.sh文件运行JAR下的Class
    查看>>
    Linux 下进行服务器间网络测速
    查看>>
    linux 下部署nodejs(两种方式)
    查看>>