简单来说,Screen 是一款免费的终端复用程序,它允许一个用户通过单独的窗口或单独的远程终端会话来访问多个分割的终端会话。
在Linux/Unix中,有这样几个概念:
* 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
* 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
* 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。
根据POSIX.1定义:
* 挂断信号(SIGHUP)默认的动作是终止程序。
* 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
* 如果会话期首进程终止,则该信号发送到该会话期前台进程组。
* 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。
因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。
安装screen:
yum install screen -y [CentOS/RedHat]
apt-get install screen [Ubuntu/Debian]
注:通常系统已自带了该程序。
在screen中创建一个新的窗口有这样几种方式:
1.直接在命令行键入screen命令
[root@tmding ~]# screen
Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。
2.Screen命令后跟你要执行的程序。
[root@tmding ~]# screen vi test.c
Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。
3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入Ctrl+a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。
screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/abc文件:
[root@tmding ~]# screen vi /tmp/abc
之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入Ctrl+a d,Screen会给出detached提示:
[detached]
半个小时之后回来了,找到该screen会话:
[root@elain ~]# screen -ls
There are screens on:
19552.pts-0.elain (Detached)
19476.pts-0.elain (Detached)
2 Sockets in /var/run/screen/S-root.
重新连接会话:
[root@elain ~]# screen -r 19552
这样就可以继续操作啦!
常用命令:
Ctrl+a ? 显示所有键绑定信息
Ctrl+a w 显示所有窗口列表
Ctrl+a Ctrl+a 切换到之前显示的窗口
Ctrl+a c 创建一个新的运行shell的窗口并切换到该窗口
Ctrl+a n 切换到下一个窗口
Ctrl+a p 切换到前一个窗口(与Ctrl+a n相对)
Ctrl+a 0..9 切换到窗口0..9
Ctrl+a a 发送 Ctrl+a到当前窗口
Ctrl+a d 暂时断开screen会话
Ctrl+a k 杀掉当前窗口
Ctrl+a [ 进入拷贝/回滚模式
更多命令请使用Ctrl+a ? 查看,以上只列出常用命令。
转载请注明: 转载自http://www.elain.org
本文链接地址:screen命令的使用
本文转自 elain2012 51CTO博客,原文链接:http://blog.51cto.com/elain/631539