Linux后台运行程序

1.Linux shell

1、在讲这节课之前我们先看一下linux shell的标准输入,标准输出及错误输出。Linux下习惯性的用0代表标准输入,1代表标准输出,2代表错误输出。

2、紧接着我们看一下linux下重定向>(>>表示追加),通过重定向我们可以将输出重定向到我们指定的地方,例如:文件,设备。

3、最后了解一下Linux下关于/dev/null这个目录的作用,对于该目录我们可以将它理解为是一个Linux下的一个黑洞,任何东西丢进该目录都会被吸收而且无法追踪。

4、举例:

ls > ls.log = ls 1> ls.log#标准输出重定向
ls 2> ls.log #标准错误重定向

例1中我们可以看出默认情况下>是进行标准输出的,故而ls > ls.log = ls 1> ls.log#标准输出重定向。如果我们想要将错误输出和标准输出同时输出到同一个文件怎么整,那么今天他来了。

ls >ls.log 2>&1 &

有些人说我不需要保留这些输出信息,那么黑洞它能满足你的需求:

ls >/dev/null 2>&1

2.&与nohup

& : 指在后台运行,当用户断开SSH连接的时候,命令自动也跟着退出

nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去(这句话可能有点不好懂,看下面举例说明),和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。

那么,我们可以巧妙的吧他们结合起来用就是nohup COMMAND & 这样就能使命令永久的在后台执行,是不是很奈斯,很奈斯有木有。

举例:

python3 xx.py run &  

将python3 xx.py run 任务放到后台 ,关闭xshell,对应的任务也跟着停止。

nohup python3 xx.py run 

将python3 xx.py run任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell依然继续运行。

nohup python3 xx.py run  & 

将python3 xx.py run任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

3.实战

run.sh(赋予改文件777权限,确保文件可执行):

nohup sudo python3 xx.py run --rf release >/dev/null 2>&1 &

在上面例子中:2>&1是将标准错误2重定向到标准输出(&1),标准输出(&1)再被重定向输入到/dev/null文件中。其中nohup COMMAND &格式是让我们的命令永久的在后台执行,–rf release为python程序运行需要的参数。

说到这里问题来了有人说我想一键退出我的程序,而我又不想去查pid然后在kill怎么办呢?今天它来了。

stop.sh(赋予改文件777权限,确保文件可执行):

for iPid in `ps aux | grep python3 |  grep xx.py | awk '{print $2}'`; do sudo kill -9 ${iPid}; done

上面例子中ps aux | grep python3 | grep xx.py的作用:查出有关xx.py的进程信息。
在这里插入图片描述
awk '{print $2}'的作用就是读取上面的进程信息的第二列(详情可以查看awk的知识):
在这里插入图片描述
for iPid in xx ; do sudo kill -9 ${iPid}; done的作用就是杀死相关进程。

实际运用中我们可以修改run.sh为

./stop.sh
nohup sudo python3 xx.py run --rf release >/dev/null 2>&1 &

这样就可以确保我们不会重复启动同一个后台程序,因为./stop.sh就相当于杀死了对应的进程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值