概述
通常我们在运行程序时,会通过终端登录服务器,然后使用shell命令运行程序。这种方式对于运行时长较短的程序没问题,但是对于深度学习中训练网络等耗时较长的程序来说很容易出问题。例如一旦机器死机、断网、不小心关闭终端等种种情况都会导致程序终止运行。又要悲剧地重新开始,简直是欲哭无泪……
那么我们希望关闭终端会话,程序依然继续运行的话,可以选择以下两种方式:
- nohup使shell命令脱离终端运行;“&”让命令在后台运行。
- 可以使用screen这个工具,实现让程序在后台运行。
1. nohup
nohup后台运行程序
nohup python -u main.py > out.log 2>&1 &
- nohup:不间断地运行,是no hang up的缩写。
- -u:python不启用缓冲,out.log中及时显示输出
- > out.log:输出内容写入nohup.out中
- &:后台运行
- 2>&1:将错误和标准都输出到my.log
0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
参考博文:https://blog.csdn.net/weixin_42840933/article/details/85780125
查看运行日志
tail -f 命令可以动态的显示程序的最新的运行情况,
tail -f out.log
停止查看:CTRIL + C
结束后端程序
使用nohup命令的时候,窗口会显示一个进程号PID。想要在服务器的后端结束这个程序,我们只需要用kill-9 杀死这个进程即可。
kill -9 PID
如果关闭了会话,如何找到该进程的PID呢?
ps -ef|grep python
找到 python -u main.py 对应的进程PID即可。 可以看到此处,我们的PID即为 28570 。
此处可以参考我的另外一篇博客:Ubuntu强制终止程序
2. Screen
Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。
安装screen
以ubuntu下安装screen为例
sudo apt install screen
创建会话
创建名为 scr_nam 的会话
screen -S scr_name
会话创建成功后即可在该会话下登录服务器,运行程序。
打开会话
打开会话,screen状态变为(Attached)。
screen -r scr_name
查看会话
查看所有screen会话
screen -ls
删除会话
(1) 退出screen(直接退出,并删除会话)
exit
(2) 删除状态为detached的会话
screen -X -S src_name quit
最后
以上就是爱听歌往事为你收集整理的screen / nohup 实现后台运行程序的全部内容,希望文章能够帮你解决screen / nohup 实现后台运行程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复