目录
一、nohup
1、nohup 和 & 的区别
2、使用方法
二、screen
1、使用方法
2、其他命令
程序执行不受终端关闭或断网影响:两种方法 ① nohup;② screen
区别:使用 nohup 把程序放到后台,就再也无法切换程序到前台了,而screen可以。
一、nohup
用途:不挂断地运行命令。我们在使用 Xshell 等工具执行 Linux 脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用 nohup 指令来运行指令,使程序可以忽略挂起信号继续运行。
1、nohup 和 & 的区别
- &:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束
- nohup:不挂断的运行,注意并没有后台运行的功能,就是指用 nohup 运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开 SSH 连接都不会影响他的运行,注意了 nohup 没有后台运行的意思;& 才是后台运行
- 因此将 nohup 和 & 结合使用,就可以实现使命令永久地在后台执行的功能
2、使用方法
1)执行以下命令,将代码放入后台运行
# 后台运行(不受终端关闭干扰),将终端的输出重定向nohup.out文件(文件名字任取), 我一般使用log.txt
nohup python main.py > nohup.out 2>&1 &
- 2>&1 解释:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 run.log 文件中。(2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出; 2>&1 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出)
- 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)
2)执行以下命令,查询当前目录下查看 log.txt
tail -n 50 log.txt # 查看最后50行
head -n 50 log.txt # 查看开始50行
3)监测程序是否在正常运行中
ps -aux|grep chat.js # R就是在运行,显示done说明运行结束了
# 或者
ps -aux|grep python # 查看所有python进程
a: 显示所有程序
u: 以用户为主的格式来显示
x: 显示所有程序,不以终端机来区分
4)杀掉进程
kill -9 PID号 # 停掉当前的父进程即可。-9 的意思是强制删除
# PID号可以用ps -aux|grep python查看,或者nvidia-smi查看
二、screen
1、使用方法
1)安装screen
yum -y install screen
# 或者
sudo apt-get install screen
2)创建一个screen任务
# 方式一: 创建有名字的screen任务,方便管理
screen -S task_name
# 方式二: 创建没有名字的screen任务
screen
执行完上述命令后,其实就进入了screen的shell环境 此时执行的操作 都是放在screen里的。(在这个终端界面运行的 命令,都可以离线运行。)
3)执行文件
# 进入窗口后 执行文件
# > output.log 2>&1 表示输出日志
python test.py > output.log 2>&1
4)杀死当前窗口或退出当前窗口
Ctrl+a+k # 杀死当前窗口
exit # 彻底退出窗口,屏幕显示[screen is terminating]即可
5)查看screen任务
screen -ls
如下的10899就是screen任务的pid:
[root@localhost ~]# screen -ls
There is a screen on:10899.task (Attached)
1 Socket in /var/run/screen/S-root.
6)进入某个窗口
screen -r 会话名/会话id # 返回某个screen会话,若有重叠会话名,采用screen -r 会话id.会话名.
2、其他命令
- 暂停窗口内运行的python程序
Ctrl + C # 停止程序运行
- 其他
Ctrl+a+num # 切换至编号为num的窗口
ctrl+a+d # 先同时按ctrl+a,再按d,显示[detached],回到主会话,保留当前窗口。
screen -S your_screen_name/id -X quit # 删除会话