上图是screen的session列表,图中Attached
代表有其他终端正在使用这个session,Detached
说明session处于离线状态,
下面一起来看一下我们使用Screen时,常用的一些命令:
screen -S name -> 创建一个名为:name 的session(伪终端)
screen -R name -> 先试图恢复离线的session。若找不到离线的,即建立新的session(伪终端)
screen -ls -> 列出所有已经存在的session
ctrl + a + d -> 退出当前的session
screen -d name -> 将指定的session作业离线。
screen -d -r name -> 离线当前session,恢复并回到name这个session
kill (session进程号) -> 杀掉某个session进程
实际操作流程示例:
1、创建一个名称为“chh”的session。
创建方式一
screen -S chh
创建方式二
screen -R chh
2、创建后会自动进入session,进行相关操作。
3、通过ctrl + a + d
退出当前session,使其后台(离线)运行
4、screen -ls 查看session列表
5、通过screen -r chh
或screen -r 9043(进程号)
登录离线session
6、杀掉“chh”这个session
kill 9043(进程号)
-
如果你使用yum软件包管理工具:yum install screen
-
如果你使用APT软件包管理工具:apt-get install screen
另:手动下载地址:http://ftp.gnu.org/gnu/screen/
我们可以通过查看进程树来理解screen是如何不受ssh断开影响的。
- 这是不用screen的普通运行方式及进程树
[root@pvcent107 ~]# ping www.baidu.com &
[1] 9499
[root@pvcent107 ~]# pstree -H 9499
init─┬─Xvnc
├─acpid
├─atd
├─2*[sendmail]
└─sshd─┬─sshd───sshd───bash───ping
└─sshd───sshd───bash───pstree
我们可以看出,未使用 screen 时我们所处的 bash 是 sshd 的子进程,当 ssh 断开连接时,HUP 信号自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程),杀掉所有子进程。
- 再看看使用 screen 运行进程的进程树
[root@pvcent107 ~]# screen -r chh
[root@pvcent107 ~]# ping www.baidu.com &
[1] 9488
[root@pvcent107 ~]# pstree -H 9488
init─┬─Xvnc
├─acpid
├─atd
├─screen───bash───ping
├─2*[sendmail]
如图可见,bash 是 screen 的子进程,而 screen 是 init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信号自然不会影响到 screen 下面的子进程了。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!