​ 在本地开发时,经常需要使用远程连接到Linux服务器,一开始我自己都是有几个远程就开几个SSH窗口,这种方法很原始很直接,但每次都受够了密码输入,即使用了SSH免密码登录,也会觉得每次输入SSH的命令一点都不快速,况且况且窗口开多了,也会很混乱,不易管理,这种情况,Linux上的工具也有很多,今天就学习一下screen工具。

​ 在介绍screen工具时,先讨论一下,为什么连接服务器后,当执行长时间的任务时,我们关闭远程连接窗口,这个任务就被杀掉了呢?

元凶:SIGUP信号

​ 在Linux/Unix中,有以下几个概念:

  • 进程组(process group):一个或多个进程的集合,每个进程组都有一个唯一的进程组ID;

  • 会话期(session):一个或多个进程组的集合,有唯一一个会话首进程(session leader),会话期ID为首进程ID;

  • 会话期可以有一个单独的会话终端,与控制终端连接的会话期首进程叫控制进程(controlling process),当前与终端交互的进程称为前台进程组,其余进程组称为后台进程组。

​工具POSIX.1定义:

  • 挂断信号(SIGHUP)默认的动作是终止程序;

  • 当终端接口检测到网络连接断开,将发送SIGHUP信号给控制进程(会话期首进程);

  • 如果会话期首进程终止,则该信号发送到该会话期前台进程组;

  • 一个进程退出导致一个孤儿进程组产生时,如果人一个孤儿进程组进程处于STOP状态,则发送SIGHUP和SIGCONT信号到该进程组中所有进程。

因此当网络断开或窗口关闭时,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

一个简单例子

打开两个SSH终端窗口,在第一个中执行ping命令:

再另一个终端窗口中,找到ping的进程ID为22132,其父进程ID为21803,即登录zsh:

使用ps -xj可以看到,登录zsh(PID 21803)和ping在同一会话期,zsh为会话期首进程,所以进程组PGID为21803,ping所在的进程组PGID为22132,为前台进程组。

这时,我们关闭第一个SSH远程窗口,在另一个窗口中看到ping进程被杀掉了:

这就发现,当我们执行一个耗时的任务时,如果关闭了这个窗口,这个任务进程也就被杀掉了,并不是我们所期望的那样在后台继续执行。

使用screen

​ 现在,也不需要多说screen到底是干什么的了,直接说怎么使用吧。

  1. 直接执行screen命令

screen将创建一个执行shell的全屏窗口,可以看到窗口的title已经提示处于screen程序中,在这个窗口中你可以随便执行命令,如果要退出输入exit命令。

  1. 如果你想新开一个窗口执行另一个任务,可以执行:
// 方法1
按键盘Ctrl+a +c, 会心打开一个screen窗口

// 方法2
screen 需要执行的任务的命令,比如:
screen ping www.baidu.com</pre>
  1. 多个screen窗口切换
方法1
键盘Ctrl+a +[0..9]

方法2
键盘Ctrl+a +n, 下一个screen窗口
键盘Ctrl+a +p, 上一个screen窗口</pre>

更多命令可以看下图:

Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,Screen中还有会话的概念,用户可以在一个screen会话中创建多个screen窗口,而在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。

参考:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/

欢迎关注我的公众号:

最新文章

  1. 浅谈JSON.stringify 函数与toJosn函数和Json.parse函数
  2. Angular js 之一些简单的js操作
  3. 【Linux】依赖包检查
  4. awk 两列相减
  5. HTML第一天学习笔记
  6. bootstrap 模态框关闭状态怎么获取
  7. 《学习OpenCV》 第四章 习题六
  8. Stopwatch 类【转】
  9. 表单与JQuery
  10. iOS 开发之照片框架详解
  11. eclipse中以debug方式启动tomcat报错
  12. Dorado7与@ManyToMany的矛盾分析
  13. 001-Mono for android在vs2012中发布设置
  14. Anroid四大组件service之本地服务
  15. nf共享
  16. Alibaba阿里巴巴开源软件列表
  17. 在用jQuery时遇到的小问题
  18. js编译原理(你不知道的javascript)
  19. Go基础系列:WaitGroup用法说明
  20. css中的float属性以及清除方法 (2011-09-03 17:36:26)

热门文章

  1. idea 多项目部署碰到的问题
  2. Android分享图文到朋友圈代码。
  3. LeetCode-Largest Rectangle in Histogram O(n) 详析-ZZ
  4. 对sql作业的总结(不用group by 通过with as,exists实现分类)
  5. 如何申请免费域名证书,以及在IIS上绑定
  6. 安装skype for business server组件 报错“未满足先决条件”和安装KB2982006补丁提示“此更新不适用于你的计算机”
  7. 记一次insert因为db file sequential read影响性能导致性能原因的分析
  8. July 03rd 2017 Week 27th Monday
  9. July 01st 2017 Week 26th Saturday
  10. python UI自动化实战记录八:添加配置