示例 :
我們用python代碼loop_hello.py做示例,代碼的作用是循環輸出循環次數和hello world!,每次輸出后sleep 1秒
示例代碼如下:
import time
def main():
i = 0
while True:
i += 1
print('%d: hello world!' %(i))
time.sleep(1)
if '__main__' == __name__:
main()
運行loop_hello.py,輸出結果如下:

程序每隔一秒會在終端輸出一個字符串,此時如果鍵入Ctrl+C ,程序會收到一個SIGINT信號,如果不做特殊處理,程序的默認行為是終止(如上圖)。
&
使用 python loop_hello.py &,效果如下所示:

首先會在終端顯示進程號是2367
鍵入Ctrl + C,發出SIGINT信號,程序會繼續運行
關掉session,程序會收到一個SIGHUP信號,通過ps aux | grep loop_hello.py可以看到,進程2367也關閉了
nohup
使用nohup python loop_hello.py,效果如下:

- 前臺沒有出現進程號
- 有一個“忽略輸入并把輸出追加到"nohup.out"”的提示
- hello的輸出也沒有出現在前臺
如果關掉session,程序會不會關閉呢?
- 使用ps aux | grep loop_hello查看進程號
- 關掉session,程序會收到一個SIGHUP信號
- 再次使用ps aux | grep loop_hello,發現進程仍然存在
- kill掉進程
測試一下Ctrl +C
使用nohup啟動loop_hello.py,如果鍵入Ctrl+C ,程序收到SIGINT信號后,直接關閉了
&和nohup同時使用
使用nohup python loop_hello.py &運行程序,效果如下:

鍵入Ctrl + C,發送SIGINT信號 使用ps aux查看,進程仍然存在
關閉session,發送SIGHUP信號 使用ps aux查看,進程依然存在
如果想要終止進程的話,只能使用kill了
總結 :
使用&后臺運行程序:
- 結果會輸出到終端
- 使用Ctrl + C發送SIGINT信號,程序免疫
- 關閉session發送SIGHUP信號,程序關閉
使用nohup運行程序:
- 結果默認會輸出到nohup.out
- 使用Ctrl + C發送SIGINT信號,程序關閉
- 關閉session發送SIGHUP信號,程序免疫
平日線上經常使用nohup和&配合來啟動程序:
- 同時免疫SIGINT和SIGHUP信號
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。