Ubuntu nohup 稳定后台运行

实操

1.编写sh脚本

假如你需要在anaconda环境下运行python脚本,你可以编写run.sh

cd /home/liu/xxx
python run.py

2.执行sh脚本

然后在ssh终端(或正常终端)中,进入anaconda环境,进入run.sh所在路径

cd “run.sh所在path”

在终端执行即可sh脚本

nohup sh run.sh &

细节

1.nohup与&区别1

&:

  1. 使用ctrl C,那么run.sh照样运行SIGINT信号免疫
  2. 直接关掉shell后, 那么run.sh进程同样消失 SIGHUP信号不免疫

nohup:

  1. 关闭shell, run.sh进程还是存在SIGHUP信号免疫
  2. shell中用Ctrl C,那么run.sh进程也是会消失对SIGINT信号不免疫

2.查看后台的进程2

2.1 jobs

jobs -l

jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps

2.2 ps

在无论哪个终端都可以查看进程,第二列就是进程号

ps -aux|grep "sh run.sh"

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

3.终止后台运行的进程

在这里插入图片描述

kill -9  进程号

nohup重定向3

1.修改重定向路径

默认是重定向到nohup.out文件,修改指定路径

nohup sh run.sh >output.log 2>&1 &

2.解释

2>&1:把标准错误重定向到标准输出中,而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。
nohup ./command.sh >output 2>output出错的原因 :解释
为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖.

3./dev/null文件的作用

这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>/dev/null 2>&1


  1. https://www.jianshu.com/p/93a45927f013 ↩︎

  2. https://www.cnblogs.com/baby123/p/6477429.html ↩︎

  3. https://www.cnblogs.com/zq-inlook/p/3577003.html ↩︎

你可能感兴趣的:(ubuntu,linux,ubuntu,nohup,后台运行)