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
- 运行后,控制台一直是这个样子,无法进行其他的操作。
[email protected]:~$ python3 123.py >> log.txt
- 后面加一个
&
后就可以进行操作别的东西了。
[email protected]:~$ python3 123.py >> log.txt &
[2] 809
[email protected]:~$
但是关闭控制台后,即使python3 123.py >> log.txt &
后面有&
依然会被终止进程。
因为关闭终端后会收到挂断信号。nohup就不会收到挂断信号。
nohup正如名字所声称的,忽略所有发送给子命令的挂断(SIGHUP)信号。
这样所有发给命令的SIGHUP信号都被忽略,命令就不会收到SIGHUP信号。
什么是SIGHUP信号呢?
简单的理解可以是终端结束时,操作系统会发送SIGHUP信号到后台进程。
- 用nohup是这个样子的
[email protected]:~$ nohup python3 123.py >> log.txt &
[3] 905
原文地址:https://www.cnblogs.com/sogeisetsu/p/11403326.html
时间: 2024-11-17 18:27:36