现在的位置: 首页 > 综合 > 正文

使用Screen来代替nohup+&,强大的screen

2012年03月31日 ⁄ 综合 ⁄ 共 1396字 ⁄ 字号 评论关闭
以前我们在执行一个需要长时间执行的命令的时候,都是用的nohup+&这对组合,&是进程放到后台,nohup的作用是拦截SIGHUP信号,使我们的终端,比如SSH终端退出的时候,程序依旧留在linux系统中。 

但是这对组合有问题,特别是&,比如有些程序无法放到后台等。 

所以,今天介绍的screen,为你解决这些问题,非常的好用。不过貌似screen要在CentOS 4开始才是操作系统自带的。Screen是GNU做的,是free的。 

Screen等于一个虚拟窗口,以下列出三种常用的方式: 

1. 直接在命令行中输入screen,此时发现好像没什么反应,其实已经新开了一个shell,这个shell是screen管理的,这一点可以用ps看,已经有一个screen进程存在了。 

此时在这个shell中,我们可以运行我们想执行的一个耗时的命令,比如mpirun .........,OK,现在命令开始跑了,但是我们不能傻等啊,很简单,按下ctrl+a,然后按d,能看到一行信息:detach......,这表示我们现在和当前的这个screen detach,这样就回到了执行screen命令前的那个shell。此时,就算我们用exit退出了ssh,进程仍然在,下次登录上来之后,可以用命令:screen -ls/-list 来查看当前有哪些screen的实例在运行,此时就可以看到我们刚才执行的那个mpirun的命令进程,然后再用screen -r <pid or screen name>就可以回到那个mpirun的终端界面了!

2. 这种做法和上面一样,只不过可以直接将命令就写在screen的后面,比如screen mpirun ......,然后ctrl+a,再按d,detach screen,要回到mpirun的界面,用screen -r即可 

3. 第三种做法更爽,用screen -dmS <screen name> mpirun ......。这里-d, -m是一对组合,他们表示一开始就创建一个detach的screen;-S表示我们给这个screen起个名字,这对于我们同时开很多screen的时候很有用,因为不用面对pid了。所以,这个命令一执行就会返回,此时用screen -ls能看到刚才的screen处于detach状态,后面要回复,做法就和上面一样了。 

要记住,ctrl+a是screen的特殊键,这表示下面按下的字符是screen的命令,当然,我们可以自定义ctrl+a这个组合键,也可以自定义screen中的命令,这个就看附件吧。附件来自IBM DeveloperWorks。在按下ctrl+a后,按下?键,就能查看所有的screen命令。 

BTW:如果有些进程意外终止了,这会导致这个命令所在的screen处于dead状态,此时用screen -wipe就可以擦掉这些dead的screen。有了screen,现在我觉得都没必要开多个ssh client窗口了,用screen全搞定。 

现在发现的screen的一个缺点就是有一点性能损失,比如用screen打开一个vi的程序,在vi中编辑,会发现按下ESC切换到vi的命令模式,比正常情况下响应要慢0.5秒左右,有点小不爽。更多的问题或是好的tips留在以后使用screen的时候再慢慢补充吧。

 /Files/super119/using_screen.mht.zip

【上篇】
【下篇】

抱歉!评论已关闭.