Linux服务器SSH客户端断开后保持程序继续运行的方法

前言

在申请服务器连接到桌面后,有些时候需要跑一些运行时间很长的程序(深度学习的训练程序)。在这期间如果退出断开连接,即:关闭桌面的编辑器或网页端的jupyter界面后Linux系统会自动关闭所有进程,程序也会随之终止运行(被挂起),这是不希望看到的,因此本文将通过使用nohup命令教大家一种在用户关闭编辑软件程序仍保持运行的方法。

一、在终端界面运行程序

首先在终端界面打开要执行程序的所在目录,使用如下命令开始运行程序:

nohup 程序运行的编译器 程序名称(带有文件类型后缀) &

例如,我要运行main_attetion_train.py程序,它使用python编译器进行编译,该文件相对于当前终端的位置在:data/ygw/NESP/working目录下。因此我的运行命令需要这样写:

cd data/ygw/NESP/working
nohup python main_attetion_train.py &

运行结果如下:
在这里插入图片描述
从图中看出在执行了这两条命令出现了两行输出:
第一行出现了[1] 23024的字样,“[1]”是此进程的编号,“23024”是本次运行程序在linux中的进程号PID,这个在后期手动结束进程的时候需要,一定要记下来!!!
第二行出现的字样就是程序运行成功的标致,意思是将程序的输出日志信息放到“nohup.out”文件中存储,如果在执行程序后发现该行出现的字样与上图的不符,应该就是没有执行成功。

二、监视和查看程序的运行情况

在成功执行程序后,可以通过如下命令查看程序的运行情况:

tail -f nohup.out

这个nohup.out就上在运行程序时nohup命令指定的日志信息存储文件,它也在当前终端对应的目录下,所以除了用此命令在终端中查看内容也可以直接找到这个文件用记事本打开查看。
例如我在运行程序后输入此命令显示:
在这里插入图片描述
其中文件里的内容就是程序执行时输出的日志信息。

Tick:对于深度学习程序来讲我们可以通过实时查看GPU的使用情况来判断程序是否在运行。查看GPU当前使用情况的命令是:

python nvidia-smi

我在运行程序前查看的GPU信息为:
在这里插入图片描述
可以看出此时的GPU现存使用率为0,也就是当前没有什么进程在使用GPU。
当我把程序运行起来后再查看GPU的信息:
在这里插入图片描述
此时发现GPU基本是满功耗运行,从侧面印证了程序在正常运行。

三、结束程序

现在运行的程序被设置为了不会随客户端断而终止的程序,所以在我们就得通过手动命令的形式在我们需要终端的时候终止程序,否则它就会一直执行到结束为止。终止程序可以采用Linux系统中的强制结束进程的方法,命令为:

kill -9 进程号

这里说一下,kill是一个命令组,后面跟的数字不同对应的kill效果不同,-9表示强制杀死进程,对kill其它使用方法有兴趣的小伙伴可以去自行查阅。这里只需要强制结束进程的效果,所以只介绍kill -9
下面以我的程序为例展示结束程序(杀死进程)的方法:
对第一步运行程序的时候通过输出端看到程序的进程号为:2304,因此需要执行的具体命令为:

kill -9 23024

在这里插入图片描述
执行后会弹出[1]+ Killed的提示,说明命令执行成功。为了再次验证程序是否终止,可以查看此时GPU的使用率:
在这里插入图片描述
从GPU使用信息中可以看出,此时GPU几乎无占用率,说明程序确实终止运行了。

四、忘记PID号的补救措施——查看运行程序的PID

一定有小伙伴在运行程序后关闭了终端页面,忘记了程序的PID号(我第一次就是这样)。这时可以通过查看目前终端中正在执行程序的PID号来找出之前程序的PID号。命令为:

ps -e|grep 程序的运行类型

这里我的程序运行类型为python,所以我的操作为:

ps -e|grep python

运行结果为:
在这里插入图片描述
可以看到PID号为:23195。然后再执行kill命令就可以了。
PS1:上一个程序已经结束,为了演示我又从新运行了程序,所以现在的PID号和上面的那个不一样。
PS2:这里我的系统只开了一个python进程,所以很容易找到程序的PID号,当系统同时开了很多python进程的时候就很难定位要停止的python进程对应的PID号(此时可以通过估计自己程序的执行时间来确定,就是python字样前面的那个00:00:40),这个表示目前这个进程执行了40s。当然还是建议记住PID号,这个估计的找法在有多个进程时容易弄错!!!

五、总结

通过上述方法可以使得程序在关闭客户端后仍然运行,这可以解放我们的电脑。同时相比于那种申请训练任务直接执行的模式,这种连接可以充分发挥桌面调试的优势(任务+调试模式兼得),不至于当程序中存在错误时直接导致训练任务失败,再次运行就需要重新申请。对于不想刷爆实验室集群服务器申请记录的小白来说是十分友好的。

  • 13
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好!对于Linux服务器频繁断开连接的问题,有几个可能的原因和解决方法。 1. 网络问题:首先,确保服务器的网络连接稳定。检查网络设备(如路由器、交换机、网线)是否正常工作。你可以尝试使用其他设备连接同一网络,或者尝试连接其他网络来排除网络问题。 2. SSH超时设置:如果你是通过SSH连接服务器,可能是SSH会话超时导致断开连接。你可以修改SSH配置文件来增加超时时间。打开SSH配置文件(通常位于/etc/ssh/sshd_config),找到"ClientAliveInterval"和"ClientAliveCountMax"参数,并适当增加它们的值。然后重启SSH服务。 3. 防火墙和路由器设置:确保服务器的防火墙和路由器没有配置规则或策略会导致断开连接。检查防火墙日志和路由器配置,确保它们没有限制或阻止服务器连接。 4. 系统负载过高:服务器的系统负载过高可能导致连接断开。你可以使用命令"top"来查看系统的负载情况,找到占用CPU或内存较高的进程,并采取相应的措施来降低系统负载。 5. SSH客户端设置:如果是通过SSH客户端连接服务器,检查客户端的设置是否会导致断开连接。有些客户端可能有超时设置或断开空闲连接的选项,你可以尝试调整这些设置来解决问题。 请注意,这只是一些可能的解决方法,具体原因需要根据实际情况进行排查。如果问题仍然存在,建议在相关的技术社区或论坛上寻求帮助,以便能够得到更详细和针对性的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值