学习linux一年多,一直以为自己可以脱离界面,但是在服务器上还是有些不适应,最近才知道screen这个软件,也意识到这个软件的重要性:服务器上要迁移,都是远程连过去的,这时需要打包,如果打包到一半的时候网络断了,那就白干了。包大的话,有时可能打包都需要一天的时间。再加上传输,速度慢的话,服务器可能传上好几天。如果是我跟服务器的网络断掉,有了screen也不会有影响。如果服务器之间断网,那就呵呵了。


screen 是一个特殊的模拟终端软件,利用它能在一个终端窗口里模拟出多个终端并且能分割窗口、类似 VI 的方式搜索和拷贝屏幕输出,最重要的是利用screen,可以让任务后台执行,退出系统,下次登录恢复后跟以前状态一样。


通常linux的进程在父目录被KILL以后,就会接收到sighup命令,然后退出运行。nohup和screen 都可以对sighup命令起到屏蔽作用,让命令可以持续运行。nohup比较小巧,screen命令比较强大。各有用处。nohup如果需要在终端关闭后还可以运行,需在后面加 &

格式: nohup <command> [argument...] &


一.screen状态有四种:
1.Attached 目前正在工作当中,当使用Ctrl+a+d就会退出工作状态,状态就会变Detached,但是还是后台工作
2.Datached 在后台工作当中,也可以在Attached状态时使用命令screen -r 1000让其变成Datached状态
3.Dead ??? 死亡状态,这个需要用的命令是kill -9 3000,如果已经是Dead状态,用这命令是会报错的,只能去杀前两种状态的screen进程
4.Removed 当使用screen -wipe删掉某个screen进程的时候显示


二.screen 命令的的用法:


screen常用参数:

 -A  将所有的视窗都调整为目前终端机的大小。
 -d <作业名称>  将指定的screen作业离线。
 -h <行数>  指定视窗的缓冲区行数。
 -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
 -r <作业名称>  恢复离线的screen作业。
 -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
 -s <shell>  指定建立新视窗时,所要执行的shell。
 -S <作业名称>  指定screen作业的名称。
 -v  显示版本信息。
 -x  恢复正在工作的screen作业。
 -ls或--list  显示目前所有的screen作业。
 -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业


下面对参数做出一些说明:

1.screen 运行screen命令后会自动打开一个新shell,在这个新的shell里可以运行任何命令。一般只开一个。可以想象成上网一般只用开一个浏览器。新建bash,最多可建10个。每一个bash都可以单独浏览和工作。可以想象成浏览器的标签。

crtl+A+数字[0-9] #直接跳到第n个bash
ctrl+A+A #bash之间快速切换

2.exit 退出screen(记得你退出的是bash还是screen)

3.如果一个进程很重要,不想在退出终端的时候中断,可以按ctrl+a+d (先ctrl+a 后按d就可以),也就是在此时(关闭终端的时候),screen屏蔽掉了父目录发送的signhup命令。进程由Attached状态变成Datached

4.screen -r 列出进入Datached状态的screen

5.screen -r pid 恢复对应的进程

6.screen -S hehe 进程里就会看到这个screen被标为 hehe.ttyn.host,而不是进程ID。类似于备注提示

7.screen -d pid将Attached状态的screen变成Datached(同ctrl+a+d)