一. 前言
也算是对我最近几天对云服务器学习的一个复盘,我购买了一个阿里云的主机,系统为Ubuntu。在使用的过程中我发现当我断开远程的ssh连接之后,原本在Terminal正在执行的任务就会立即中止。随即查阅资料解决了这个问题
二. 原因
通过SSH连接到远程服务器进行操作时,在这个连接窗口内的所有操作都依附于这个终端窗口,并将其作为父进程。而当终端关闭的时候,在这个窗口内执行的所有进程都会收到一个SIGHUP信号,故而任务被终止,通常终端关闭也有两种情况:
- 操作完成手动关闭
- 网络波动直接断开连接
而这对我们开发者来说是有点难以接受的,因为我们不可能永远开个一个ssh终端来执行任务,特别是有些任务特别耗时。那么事实上也有解决方案。
三. 解决方案
1. 使用nohup命令
我用的少,如想知道详细用法请移步 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】
2.使用screen命令
screen -v
sudo apt-get update
sudo apt-get install screen
screen -S demo #创建一个名称为demo的窗口,记住!S要大写

screen -ls
我们就可以看见创建的会话列表,如图所示: 这里的111206就是会话的id,demo就是咱们刚刚创建的会话名称。括号里面的内容就是会话的状态,有Detached状态和Attached状态,Detached表示分离状态,Attached表示正在关联状态。 6. 我们要重新加入一个会话,有两种方法
screen -r id #这个id替换成你自己的会话id
or
screen -r name #这个name替换成你自己的会话名称
-r 参数:
-r 参数用于重新附加到一个已经存在的 screen 会话。 当你使用 screen -r session_name 命令时,如果 session_name 指定的会话已经存在并且处于 Detached(已分离)状态,这个命令会将你重新连接到这个会话,使其变为 Attached(已附加)状态。 如果会话已经处于 Attached 状态,-r 参数将允许你加入到会话中,这样你就可以与其他用户共享同一个会话,并且可以看到相同的输出。 7. 当我们在会话中执行完操作之后想要关闭会话时
exit #注意是在你的会话中执行exit而不是在主terminal
我们再用screen -ls就发现会话列表为空了
四.总结
贴出一份命令总览
screen -S 会话名 # 创建一个会话,例如 screen -S icy_hope
screen -ls # 查看已有会话(会话id、会话名、状态)
exit # 退出会话,慎用,想要让它后台运行,直接关闭窗口即可
screen -r 会话id # 回到已离线(状态为Detached)的会话,会话id通过-ls查看
screen -S 会话id -X quit # kill掉一个会话
# 进入一个会话后可使用快捷键
Ctrl+a+c # 创建一个新的窗口
Ctrl+a+w # 列出窗口列表
Ctrl+a+n # 回到下一个窗口
Ctrl+a+p # 回到上一个窗口
Ctrl+a+0-9 # 切换窗口,在第0个窗口和第9个窗口之间切换
常用常新,一时间记不住没关系的,总有一天会全部记住的。
- 【Linux】screen常用命令
- 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】
评论前必须登录!
注册