nohup與&完美結合

nohup ./start.sh &

&的意思是在後臺運行, 當你在執行 ./start.sh & 的時候, 即使你用ctrl C, 那麼start.sh照樣運行(因爲對SIGINT信號免疫)。 但是要注意, 如果你直接關掉shell後, 那麼,start.sh進程同樣消失。 可見, &的後臺並不硬(因爲對SIGHUP信號不免疫)。

nohup的意思是忽略SIGHUP信號, 所以當運行nohup ./start.sh的時候, 關閉shell, 那麼start.sh進程還是存在的(對SIGHUP信號免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那麼start.sh進程也是會消失的(因爲對SIGINT信號不免疫)

所以, &和nohup沒有半毛錢的關係, 要讓進程真正不受shell中Ctrl C和shell關閉的影響, 那就用同時使用nohup ./start.sh &

結論:

使用&後臺運行程序:

  • 結果會輸出到終端

  • 使用Ctrl + C發送SIGINT信號,程序免疫

  • 關閉session發送SIGHUP信號,程序關閉

使用nohup運行程序:

  • 結果默認會輸出到nohup.out

  • 使用Ctrl + C發送SIGINT信號,程序關閉

  • 關閉session發送SIGHUP信號,程序免疫

平日線上經常使用nohup和&配合來啓動程序:

  • 同時免疫SIGINT和SIGHUP信號

同時,還有一個最佳實踐:

  • 不將信息輸出到終端標準輸出,而是用日誌組件將信息記錄到日誌文件裏:nohup.out

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章