linux screen命令的简单使用


编	写:袁	亮
时	间:2015-07-27
说	明:linux screen命令的简单使用

一、解决什么问题?
	1、在服务器执行一些比较耗时的事情:下载、系统备份、传输文件、安装软件或者执行一个脚本等
	2、当因为某些原因与服务器断开连接,所有的执行都会白费(网突然断了,putty不小心关了,电脑卡死等等原因)
	3、或者我们在同一台服务器上需要做多件事,经常需要切换目录等等
	当出现以上情况时,都可以考虑使用screen来解决
	
二、大致原理
	1、正常我们使用putty连接到服务器,相当于一次会话
	2、当连接终止的时候,该会话相关的进程都会被终止,关闭,因此就会出现任务还没执行完,就挂掉了
	3、screen相当于在服务器上使用后台又开了一个会话,因此当前这个会话被关闭,不影响新开的那个会话中的任务执行
	4、当我们putty断掉之后,可以重新连接上去,查看之前的screen会话中的执行情况
	
三、简单使用
	1、添加一个screen窗口
		screen -S 自己定义窗口名,方便查看
	2、查看现在有几个screen
		screen -ls
	3、中断跳出某个screen窗口
		ctrl+a+d
	4、选择恢复某个screen窗口
		screen -r 创建时候定义的名字,或者通过screen -ls中看到的数字编号
	5、彻底关闭某个screen窗口
		5.1 在那个窗口中直接exit
		5.2 在那个窗口下,ctrl+d
		5.3 在那个窗口下,ctrl+a+k
		
四、原理(有兴趣的可以了解下,没兴趣的知道上面的即可)
	1、进程组、会话期
		进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID
		会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID
		会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组
	2、挂断信号(SIGHUP)默认的动作是终止程序
		当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)
		如果会话期首进程终止,则该信号发送到该会话期前台进程组
		一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,
		发送SIGHUP和SIGCONT信号到该进程组中所有进程
	3、因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出
	4、nohup使用
		nohup [要执行的shell命令] &
		很多时候,我是没加nohup,直接最后加&也可
	5、screen是直接新建会话,然后避免掉了上面的这个问题,nohup是忽略挂断信号来达到目的
	
附录:
	http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
	http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

发表评论