Linux后台跑程序的方法总结

发布时间 2023-12-04 17:09:24作者: 凌逆战

当使用ssh进行远程代码运行时,控制端电脑通常不能出现任何意外。然而,运行深度学习程序通常需要数小时或数天的时间,这意味着我们的IDE不能关闭。一旦出现非人为因素(如断电、断网或IDE卡死关闭),远程程序也会中断。因此,将程序灵活地运行在服务器上,不受控制端因素的影响至关重要。

第一种方法: &

第一种方法是在命令行最后加&符号

# 执行文件
./test.py &
 
# 查看是否在后台运行
ps -ef|grep test
 
# 后台的程序 需要关闭时,需要kill命令停止
killall [程序名]

注意:这种方法,查看运行日志很不方便(不推荐) 

第二种方法: nohup

nohup python -u test.py > test.log 2>&1 & 

参数说明:

 python test.py  python 运行test.py文件

 -u  :表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有延迟

 >  :test.log 将输出日志保存到这个log中

 2>1 :2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;

 2>&1 :&与1结合就代表标准输出了,就变成错误重定向到标准输出

 &  :代表该命令在后台执行

查看nohup的后台进程:

jobs

第三种方法: screen

Screen,虚拟终端管理器。可以在后台管理终端界面,防止SSH断开以后任务停止运行。

安装screen

yum install -y screen

创建一个新的窗口:执行完命令后会新建一个空白窗口。需要运行的程序在该窗口运行即可

screen -S test

screen -S 为新建指令,test为窗口名称

退出当前窗口

ctrl+a+d   (方法1:保留当前窗口)
screen -d  (方法2:保留当前窗口)
exit       (方法3:退出程序,并关闭窗口)

回到后台运行程序的子窗口: screen -r id或窗口名称 

查看当前所有的screen进程: screen -ls 

彻底退出screen进程: exit 

Ctrl+a c :创建窗口
Ctrl+a w :窗口列表
 
Ctrl+a n :下一个窗口
Ctrl+a p :上一个窗口
 
Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
 
Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口
(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
 
exit :关闭当前窗口,并且切换到下一个窗口
(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
 
Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态