[转]screen 的使用

当我们使用securecrt,putty, 等连接远程服务器时,如果正在执行一个程序,比如shell 脚本,退出当前的窗口会导致程序终止!其原理如下:

根据POSIX.1定义:

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

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

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

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

使用一个例子:securecrt 通过ssh 连接远程服务器

在会话1 执行top命令

在会话2 进行查看top进程ID 为20543 其父进程为12158,即登录shell。

[[email protected] sh]# ps -ef | grep top

root     20543 12158  0 19:23 pts/1    00:00:00 top

root     20578 12189  0 19:25 pts/2    00:00:00 grep top

使用pstree 命令查看上述关系

[[email protected] sh]# pstree -H 20543 | grep top

|-sshd-+-sshd---bash---top

[[email protected] sh]# ps -xj | grep 20543

Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.7/FAQ

12156 12158 12158 12158 pts/1    20543 Ss       0   0:00 -bash

12158 20543 20543 12158 pts/1    20543 S+       0   0:00 top

12189 20569 20568 12189 pts/2    20568 R+       0   0:00 grep 20543

[[email protected] sh]#

由ps -xj 命令查看top 命令和登录的shell -bash同属于一个会话期,shell为会话期首进程,做在进程组为12158 ,top 命令所在的PGID 为20543,为前台进程组!

关闭第一个会话,top命令被kill 掉!

[[email protected] sh]# ps -ef | grep top

root     20845 12189  0 19:35 pts/2    00:00:00 grep top

[[email protected] sh]#

如何避免SIGHUP信号中断导致当前窗口执行的命令被迫中断,大家会想到nohup,使用如下方法:

nohup command &

使得command 命令在后台执行。但是对于nohup的用法未免有些简单 ,我们可以使用一个更加强大的命令--screen。

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

查看系统是否安装screen

[[email protected] sh]# rpm -qa|grep screen

screen-4.0.3-1.el5

gnome-screensaver-2.16.1-8.el5

如果没有安装则可以使用yum install screen 来安装screen

Screen命令语法:

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

Screen命令参数:

-A -[r|R]          将所有的视窗都调整为目前终端机的大小。

-c filename        用指定的filename文件替代screen的配置文件’.screenrc’.

-d [pid.tty.host]  断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。

-D [pid.tty.host]  与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。

-h <行数>         指定视窗的缓冲区行数。

-ls或–list         显示目前所有的screen作业。

-m                 即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-p number or name  预先选择一个窗口。

-r [pid.tty.host]  恢复离线的screen进程,如果有多个断开的进程,需要指定[pid.tty.host]

-R                 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s shell           指定建立新视窗时,所要执行的shell。

-S <作业名称>      指定screen作业的名称。(用来替代[pid.tty.host]的命名方式,可以简化操作).

-v                 显示版本信息。

-wipe              检查目前所有的screen作业,并删除已经无法使用的screen作业。

-x                 恢复之前离线的screen作业。

进入screen的具体的方法:

1 直接输入 screen 命令,会进入由screen创建的全新的窗口。

[[email protected] ~]# screen

Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2 screen 后面直接跟 要执行的命令:

[[email protected] ~]# screen  vi hivedb.sh

之后使用ctrl+a d 命令中断当前的screen会话,但是当你再次进入的时候,依然是退出时候的状态!

参考文档:

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

原文链接:http://blog.itpub.net/22664653/viewspace-716291/

[转]screen 的使用

时间: 2024-12-28 01:26:27

[转]screen 的使用的相关文章

screen的用法

在工作中,经常会遇到执行任务过程比较长,此时可以把这个任务通过&的方式放到后台执行,但你当前的终端是不能中断的,如果终端中断则这种方式的后台任务也会中断. 另一种方式就是screen的方式,将任务放到虚拟终端中,你当前的终端可以任意中断,重新连接上之后执行相应的命令,就可以重新连接上screen的终端. 安装: yum install screen 常用参数: -S:创建一个终端,例:screen -S ping-->创建一个名字为ping的终端 ctrl+a+d:进入虚拟终端后,不中断退出

Deep Learning Enables You to Hide Screen when Your Boss is Approaching

https://github.com/Hironsan/BossSensor/ 背景介绍 学生时代,老师站在窗外的阴影挥之不去.大家在玩手机,看漫画,看小说的时候,总是会找同桌帮忙看着班主任有没有来. 一转眼,曾经的翩翩少年毕业了,新的烦恼来了,在你刷知乎,看视频,玩手机的时候,老板来了! 不用担心,不用着急,基于最新的人脸识别+手机推送做出的BossComing.老板站起来的时候,BossComing会通过人脸识别发现老板已经站起来,然后通过手机推送发送通知“BossComing”,并且震动告

16.使用zabbix api创建screen

zabbix的screen功能可以把graph聚合起来,统一进行展示, 我们的需求是把同一个主机组的同一个item聚合起来,比如一个screen显示同一个组的所有主机的内存使用率,达到类似ganglia的效果, 由于服务器较多,所以我们调用zabbix api来进行创建. 参考地址如下:谢谢各位大牛 https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host http://c

screen的使用和小故障

小话题: 如果在我们编译软件的时候,终端实然断了怎么办,按理论来说,在此终端下的程序都会结束.编译了老半天,白忙活了.那么可以用screen程序. screen 模拟多个虚拟窗口,并且screen模拟的终端断了以后,screen的终端不会退出,程序继续.screen 打开新的screen虚拟界面也可以隐藏打开的screen终端,返回原来的终端,当然是原终端没有断线的情况下. Ctrl+a,再按一下ctrl+d.或者直接ctrl+a,d. 按一下a,再按一下d. 想要返回screen终端,先查看一

devstack screen 详解

n my previous blog i discussed how to install devstack based openstack. Now if I need to restart individual services of openstack, in a typical openstack install I would restart the service of each component, example nova-network service, horizon etc

screen命令的最常见的使用方法

这几天用到了screen命令来在远程主机上后台执行一些命令,主要用到: screen -S yourname -> 新建一个叫yourname的session screen -ls -> 列出当前所有的session screen -r yourname -> 回到yourname这个session C-a d ->快捷键, detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen

alias别名、时间、screen、echo等——Linux基本命令(3)

1.alias别名 (1)查看.设置别名 Linux系统提供了一个有用的工具叫alias,可以让我们将一些需要频繁使用的但又过于冗长的命令设置一个别名,这样一来,以后只需输入一个简短的别名就可以达到同样的作用. alias显看当前已定义的别名 使用aliasaliname='command [-x] [....]' 可以定义别名(中括号的意思是可加可不加). 值得注意的是,不止别名=命令,还可以别名=命令+选项 例如,我们设置一个编辑网卡的配置文件别名,然后只需要输入别名,就可以进入了. (2)

Zabbix 模板 Template 的 Screen 到底在哪里?

今天,在测试zabbix 模板的时候,发现个问题,有些基础模板自带有 Screen 视图功能,但是后面在连接了该模板的主机上,却找不到该 screen 的入口. 有的人说,会是在 Monitoring  → Screens 里面,要是真这样的话,我就不用专门写一篇文章来说了,,,,, 经过网上查找资料,和自己一番摸索,终于找到了可以查看模板视图(template screen)的方法. 有三种方法可以揪出来. 1.全局搜索主机,然后点击 screen 即可查看该screen 2.如果主机有监控项

BOM的对象总结(location,screen,navigator,history)

location对象 专门保存当前窗口正在打开的url的对象. 常用的属性有: location.href 保存了完整的url:这种方式做常用 在当前窗口打开: location.href=新urllocation.protocol: 协议.host: 主机名+端口号.hostname: 主机名.port: 端口号location.pathname: 相对路径.hash: 锚点地址#xxx.search: 表单提交后地址栏中的查询字符串?变量名=值&变量名=值&... 方法: 1. 在当前

screen的安装和使用

1.安装screen apt-get install screen 2.使用screen 创建新的窗口 screen -S somename 将窗口挂起 CTRL+A+D 查看挂起的窗口 screen -ls 恢复窗口 screen -r somename