学习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)