使用 screen 后台运行命令避免 SSH 断连
Published:
在使用服务器的过程中,通常会跑一些比较长时间的代码,这个时候希望能将程序运行在服务器后台,防止客户端断开 SSH 时结束程序。
程序终止原因:SSH 下直接运行的命令会被当作 SSH 的子进程,SSH 作为父进程断掉后,子进程也跟着挂了。
使用 screen
screen
提供了终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。
建立一个处于断开模式下的会话(并指定其会话名):
screen -S [name]
列出所有会话:
screen -ls
重新连接指定会话:
screen -r [name / pid]
离开会话并让程序断续运行(会话终端下):
快捷键:CTRL + a d (按住 ctrl 不放,分别按 a 和 d)
关闭该 session(会话终端下):
# 在该 screen 中退出,退到根下。
exit
当我们用 -r
连接到 screen
会话后,我们就可以在这个伪终端里面为所欲为,再也不用担心 HUP 信号会对我们的进程造成影响,也不用给每个命令前都加上 nohup
了。
screen
其他具体操作可参考 linux screen 命令 :离线运行程序。
SIGHUP
信号原理可参考 linux 技巧:使用 screen 管理你的远程会话。
其他说明
还可以 使用 nohub
实现后台运行服务器 的功能,还有一些其他方法可参考 Linux下让进程在后台可靠运行的几种方法(nohup/&)和前后台运行程序切换,目前更喜欢使用 tmux 来进行后台进程管理,功能更加强大,可参考Tmux 配置:打造最适合自己的终端复用工具。