為什麼我們要守護程式?

為什麼我們要守護程式?

我已經閱讀並理解瞭如何創建守護進程,但從我讀到的所有內容中我從未真正理解為什麼這是需要做的。

我讀到,我們執行 fork-setsid-fork 來避免取得終端控制權的過程,但這代表什麼?如果我使用 & 在背景啟動程式(例如 './script &' ),是什麼使這個進程的執行與我正常運行一個將自身變成守護程式的程式不同?

這是否僅僅意味著如果我註銷,後台程序將停止並且守護程序將繼續運行?我真的很難理解「獲得終端控制權」的事情。

這讓我困擾的原因是因為我正在機器人上開發嵌入式 RPi,因此我需要讓程式在啟動時啟動。目前我只是使用這樣的命令從 rc.local 啟動它們su user -c 'python /home/user/launcher.py &' &。我在啟動時從未遇到過程式啟動的任何問題(我甚至可以看到透過 SSH 連接到 RPi 時使用的進程ps -e),但我想知道是否存在任何風險/是否是不好的做法。

答案1

這不僅僅是一個問題,每個問題都有很長的答案。簡要地

  • 如果我使用 & 在背景啟動程式(例如 './script &' ),是什麼使這個進程的執行與我正常運行一個將自身變成守護程式的程式不同?

    在後台運行一個程序,它不再直接受終端控制(你不能簡單地控制^C它),但它仍然可以寫入終端並幹擾你的工作。通常,守護程序會將自身與終端分離(除了分叉之外),並且其輸出/錯誤將被重定向到檔案。

  • 這是否僅僅意味著如果我註銷,後台程序將停止並且守護程序將繼續運行?

    後台程序可以受到保護,nohup但除非其輸出被重定向,否則關閉終端將阻止其寫入,從而產生可能會停止它的錯誤。

  • 我想知道是否有任何風險/這是否是不好的做法。

    除了追蹤程式的輸出(和錯誤訊息)的問題之外,還有如果程式當機則重新啟動的問題。服務腳本適合系統上其他服務的設計方式,提供或多或少標準的控制守護程序的方式。

相關內容