我是靠谱客的博主 爱听歌往事,这篇文章主要介绍screen / nohup 实现后台运行程序,现在分享给大家,希望可以做个参考。

通常我们在运行程序时,会通过终端登录服务器,然后使用shell命令运行程序。这种方式对于运行时长较短的程序没问题,但是对于深度学习中训练网络等耗时较长的程序来说很容易出问题。例如一旦机器死机、断网、不小心关闭终端等种种情况都会导致程序终止运行。又要悲剧地重新开始,简直是欲哭无泪……

那么我们希望关闭终端会话,程序依然继续运行的话,可以选择以下两种方式:

  1. nohup使shell命令脱离终端运行;“&”让命令在后台运行。
  2. 可以使用screen这个工具,实现让程序在后台运行。

1. nohup

nohup后台运行程序

复制代码
1
2
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 命令可以动态的显示程序的最新的运行情况,

复制代码
1
2
tail -f out.log

停止查看:CTRIL + C

结束后端程序

使用nohup命令的时候,窗口会显示一个进程号PID。想要在服务器的后端结束这个程序,我们只需要用kill-9 杀死这个进程即可。

复制代码
1
2
kill -9 PID

如果关闭了会话,如何找到该进程的PID呢?

复制代码
1
2
ps -ef|grep python

找到 python -u main.py 对应的进程PID即可。 可以看到此处,我们的PID即为 28570 。
在这里插入图片描述
此处可以参考我的另外一篇博客:Ubuntu强制终止程序

2. Screen

Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。

安装screen

以ubuntu下安装screen为例

复制代码
1
2
sudo apt install screen

创建会话

创建名为 scr_nam 的会话

复制代码
1
2
screen -S scr_name

会话创建成功后即可在该会话下登录服务器,运行程序。

打开会话

打开会话,screen状态变为(Attached)。

复制代码
1
2
screen -r scr_name

查看会话

查看所有screen会话

复制代码
1
2
screen -ls

删除会话

(1) 退出screen(直接退出,并删除会话)

复制代码
1
2
exit

(2) 删除状态为detached的会话

复制代码
1
2
screen -X -S src_name quit

最后

以上就是爱听歌往事最近收集整理的关于screen / nohup 实现后台运行程序的全部内容,更多相关screen内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(112)

评论列表共有 0 条评论

立即
投稿
返回
顶部