加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

教Linux运维人员如何使用screen

发布时间:2022-07-14 16:31:50 所属栏目:Linux 来源:互联网
导读:今天小编为大家分享的文章是关于Linux运维利器-screen的使用介绍,相信很多Linux运维人员对此都有所了解,下面跟小编一起来看一看文章内容吧。 Linux是一个多用户多进程的操作系统,Linux的远程操作我们常常使用是的ssh进行远程的。我们可以登录打开不通的终
  今天小编为大家分享的文章是关于Linux运维利器-screen的使用介绍,相信很多Linux运维人员对此都有所了解,下面跟小编一起来看一看文章内容吧。
 
  Linux是一个多用户多进程的操作系统,Linux的远程操作我们常常使用是的ssh进行远程的。我们可以登录打开不通的终端,但是每一个终端都是一个环节变量。你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
 
  一、分析,意外关闭终端程序挂掉的原因
  Linux/Unix中,几个相关概念:
 
  进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
 
  会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
 
  会话实例
 
  打开两个SSH终端窗口,在其中一个运行top命令。
 
  [root@tivf09 root]# top
 
  在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。
 
  [root@tivf09 root]# ps -ef|grep top
 
  root 5180 5128 0 01:03 pts/0 00:00:02 top
 
  root 5857 3672 0 01:12 pts/2 00:00:00
 
  grep top
  使用pstree命令可以更清楚地看到这个关系:
 
  [root@tivf09 root]# pstree -H 5180|grep top
 
  |-sshd-+-sshd---bash---top
  使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。
 
  [root@tivf09 root]# ps -xj|grep 5128
 
  0 0:50 top
 
  3672 18095 18094 3672 pts/2 18094 S
 
  0 0:00 grep 5128
  关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。
 
  [root@tivf09 root]# ps -ef|grep 5128
 
  root 18699 3672 0 04:35 pts/2
 
  00:00:00 grep 5128
  二、解决方案:使用工具
  方案一:使用nohup命令
 
  如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。
 
  nohup <command> [argument…] &
 
  虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。
 
  方案二:使用实用程序screen
 
  我们可以使用一个更为强大的实用程序screen,可以从GNU screen的官方网站下载安装,来解决这个问题。
 
 
  1.直接在命令行键入screen命令
  [root@tivf06 ~]# screen
 
  Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。
 
  2.Screen命令后跟你要执行的程序。
  [root@tivf06 ~]# screen vi test.c
 
  Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。
 
  3.以上两种方式都创建新的screen会话。
  我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen在该会话内生成一个新的窗口并切换到该窗口。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读