记得有一次做实验,在编译安装源码包,突然网络断开了,SSH就断开了,才知道命令也就此中断,白忙活了一场,后来才Linux下的会话进程是这样管理的,所有的会话进程都有一个最终的首进程,与当前终端交互的进程称为前台进程组,其余都是后台进程组,当交互终端检测到网络连接断开时,会将挂断信号发送给控制进程,也就是首进程,如果会话期首进程终止,则该信号发送到该会话的前台进程组中,此时前台进程会退出,就会导致一个孤儿进程产生,如果任意一个孤儿进程组处理STOP状态,则会发送挂断信号(挂断信号默认动作就是终止程序)到该进程组中所有进程,从而断开连接,命令也会终止,那么我们要想会话断开而命令不受影响可以使用screen工具来防止这个情况。

 


  
  1. 01.
  2. 在CentOS下,可以使用yum来直接安装Screen
    • yum install screen
    •  
    • FreeBSD下可以使用
    • sudo pkg_add -r -v screen
    •  
    • 安装完成后可以直接使用screen相关命令操作
    • 1)screen -ls //列出当前有哪些Screen在运行
    • 2)screen -S name //以name命名的会话
    • 3)screen -r name/ID //回到名称为name的会话
    • 4)screen -d -r //可以把一个正在运行的会话抢过来 
    • [root@test ~]# screen -ls
      There are screens on:
              30886.test1     (Attached) //会话ID和会话名称
              3876.chenkui    (Attached)
              3842.pts-0.test (Attached)
      3 Sockets in /var/run/screen/S-root.
    • [root@test ~]