当我们用SSH或者telent登录到远程服务器后,在执行例如websocket之类的需要长时间运行任务的时候,如果此时断开链接,正在进行的任务也会被强制终止。

在Linux/Unix中,有这样几个概念:

  • 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
  • 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  • 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

也就是说,连接上远程服务器后,会产生一个会话期,此时进行的任务进程会处于该会话期内,如果断开链接,服务器就会终止该会话期内的所有进程。

使用screen命令可以创建一个新的窗口,在里面进行的任务不会随着远程会话的中断而结束。

常用的命令

screen -S window 创建一个名为window的窗口
screen -ls列出所有窗口
screen -r window切换到名为window的窗口
screen -d window关闭名为window的窗口

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

更多screen详细的命令点击下方可以查看

详细的screen命令