nohup 、&、 2>&1 命令分析


nohup的意思是不间断的运行,&的意思是后台运行,2>&1的意思是标准输出和错误输出都重定向到同一个文件。
简单地说nohup运行时即使关掉控制台,它该运行还是运行。
https://blog.csdn.net/liuyanfeier/article/details/62422742讲解的比较透彻,我给他做一点补充
可以参考https://www.jianshu.com/p/747e0d5021a2

nohup 命令分析

先假设一个情况,想要后台运行一个命令怎么办?最好的办法是用&,在命令的结尾加一个&就可以在后台运行了。

&实例解析

假设有一个python程序叫做123.py
代码是这个样子,一直去输出一些东西。

import time
a = 1
while True:
        print("start to print sth")                                                                                                                       
        a+=1
        print("a=%s" %(a))
        time.sleep(2)

如果运行它的话需要python3 123.py,可以把正确的内容重定向到log.txt。这个时候命令就是
python3 123.py > log.txt

  • 运行后,控制台一直是这个样子,无法进行其他的操作。
su@DESKTOP-FA1P4IO:~$ python3 123.py >> log.txt

  • 后面加一个&后就可以进行操作别的东西了。
suyuesheng@DESKTOP-FA1P4IO:~$ python3 123.py >> log.txt &
[2] 809
suyuesheng@DESKTOP-FA1P4IO:~$

但是关闭控制台后,即使python3 123.py >> log.txt &后面有&依然会被终止进程。
因为关闭终端后会收到挂断信号。nohup就不会收到挂断信号。

nohup正如名字所声称的,忽略所有发送给子命令的挂断(SIGHUP)信号。
这样所有发给命令的SIGHUP信号都被忽略,命令就不会收到SIGHUP信号。
什么是SIGHUP信号呢?
简单的理解可以是终端结束时,操作系统会发送SIGHUP信号到后台进程。

  • 用nohup是这个样子的
su@DESKTOP-FA1P4IO:~$ nohup python3 123.py >> log.txt &
[3] 905
原文地址:https://www.cnblogs.com/sogeisetsu/p/11403326.html