编 写:袁 亮 时 间: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/