Python等程序/linux运行程序 后台运行 —— nohup (2>&1)

注意

模板就是这个样子

无论是运行python,pytorch,还是执行脚本文件,都可以这样让它后台运行

nohup

no hang up 的缩写,就是不挂断的意思

nohup python -u lian.py > lian.txt 2>&1 & 
nohup watch -n 1 gpustat > gpustat.txt 2>&1 & 
nohup bash train.sh & 

Run COMMAND, ignoring hangup signals.:运行命令,忽略挂起信号
就是不挂断的运行,注意没有后台运行功能。

就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&

是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

nohup和&

    一般在执行shell命令的时候我们在命令的后面加上一个‘&’,这样就可以使得该程序在后台运行,但是当程序运行起来之后依旧会再次在shell中输出打印信息,shell依旧被占用,关闭shell则程序退出;这个时候我们可以使用ctrl+z命令,使得这个信息消失,可以做别的事情,但是关闭shell的时候程序依旧会退出,因此这些办法都不能解决问题。

因此我们需要使用nohup命令来解决问题。

那么,我们可以巧妙的吧他们结合起来用就是
nohup COMMAND &

-u

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

> lian.txt

将输出日志保存到这个文件中

2>1

2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了

2>&1

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

符号>&是一个整体,将标准错误输出重定向到标准输出不可分开,分开后就不是这个含义了

*命令运行后会有提示,示例:
[1] 2880

代表进程2880中运行

深入理解Linux shell中2>&1的含义(全网最全,看完就懂)_linux shell_脚本之家

用jobs -l查看当前后台运行的程序

前面的[1] 是jobnum

通过ps -aux 查看任务相应进程

例如我们执行的是  nohup ./tools/dist_train.sh configs/textrecog/crnn/crnn_academic_dataset.py work_dirs/CRNN 4 > CRNN.log 2>&1 &

那我们可以用

ps -aux | grep dist_train.sh
#或者是其他好辨识的名称

来查看进程

a:显示所有程序  u:以用户为主的格式来显示   x:显示所有程序,不以终端机来区分

可以看到job -l 和 ps -aux都可以查看该任务进程的PID

通过kill结束后台任务

kill + PID

kill 38596 

就和在前台执行我们ctrl+c一样

当前正在前台执行的命令的暂停与恢复

让前台执行的命令暂停

注意是暂停!不是在后台继续执行

ctrl + z

此时当前执行的命令会暂停并放到后台,我们可以去做一些别的操作

然后想要恢复的话

fg 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值