背景:电脑使用ssh工具远程连接服务器跑深度学习的时候,本地的终端叉掉的时候,会把服务器上的代码进程一起叉掉了,这在实际场景中,非常的不方便,因为不可避免会遭受不可抗拒的原因需要代码只在服务器上跑,比如,网络原因ssh连接不稳定,本地电脑断电等。
一.nohub使用
A.nohub运行
直接上最常用的命令:
nohup python -u main.py > log.file &
命令解释:
- nohup就是不挂断的意思( no hang up)。
- 【python main.py】是你原本运行程序的命令。
- 【-u】 这个参数加在python的后面,是为了可以实时查看输出,而不用等把一段日志文件写入log.file后才能查看。
- 【log.file】将输出保存到这个文件中。(如果仅仅如此使用nohup命令的话,程序的输出会默认重定向到一个nohup.out文件下。log.file是我们自己指定的输出文件。)
- 在命令的末尾加个&符号后,程序就可以在后台运行了,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。
- nohub是不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。
- 指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。
- 那么,我们可以巧妙的吧他们结合起来用就是
nohup COMMAND &
这样就能使命令永久的在后台执行。
运行完这条命令后,代码就会永久的在后台执行了。然后终端就会这里就会显示运行代码前的样子。但是注意,此时如果直接叉掉终端,服务器中的程序仍然会停止运行,解决方案就是在终端中输入exit断开ssh连接,这样可以叉掉终端。
B.实时查看输出的命令
在终端输入如下命令:
tail -f log.file
二.如何在linux下杀死nohup提交到后台运行的程序?
方法1:
- 如果还没有退出运行nohub命令的终端界面,可以先通过 “jobs” 命令查看程序是否在运行,此时只有序号没有PID号;
- 输入命令 “jobs -l” 会显示程序的PID号,然后通过 “kill -9 PID”杀死程序;
- 输入命令 “jobs” 查看程序是否被杀死。
方法2:文章来源:https://www.toymoban.com/news/detail-683934.html
- 如果已经退出了nohub命令的终端界面,输入 “jobs” 命令则查不到正在运行的程序;
- 输入 “ps ux” 来查看所有程序的进程号PID,然后再通过 “kill -9 PID” 杀死程序;
- 输入 “ps ux” 来查看程序是否被杀死。
参考文章:文章来源地址https://www.toymoban.com/news/detail-683934.html
- https://blog.csdn.net/qq_38835492/article/details/80554774
- https://blog.csdn.net/hahameier/article/details/107325070
- https://blog.csdn.net/SanyHo/article/details/109522358
到了这里,关于linux后台执行命令:&与nohup的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!