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