Daemon
為什麼我們要守護程序?
我已經閱讀並了解了您如何創建守護程序,但是從我閱讀的所有內容中,我從來沒有真正理解為什麼需要這樣做。
我讀過我們使用 fork-setsid-fork 來避免獲得終端控制權的過程,但這意味著什麼?如果我在後台使用 & 啟動一個程序(例如 ‘./script &’ ),是什麼讓這個程序的執行與我正常執行一個將自身變成守護程序的程序不同?
這是否僅僅意味著如果我註銷後台程序將停止並且守護程序將繼續執行?我真的很難理解“獲得終端控制權”的事情。
這讓我感到困擾的原因是因為我正在研究機器人上的嵌入式 RPi,因此我需要讓程序在啟動時啟動。目前我只是用這樣的命令從 rc.local 啟動它們
su user -c 'python /home/user/launcher.py &' &
。我從來沒有遇到過從啟動時啟動的程序的任何問題(我什至可以看到通過ps -e
SSH 連接到 RPi 時使用的過程),但我想知道是否存在任何風險/如果這是不好的做法。
這不止一個問題,每個問題都有很長的答案。簡要地
- 如果我在後台使用 & 啟動一個程序(例如 ‘./script &’ ),是什麼讓這個程序的執行與我正常執行一個將自身變成守護程序的程序不同?
在後台執行一個程序,它不再是由終端直接控制(你不能簡單的
^C
),但它仍然可以寫入終端,干擾你的工作。通常,守護程序會將自己與終端分開(除了分叉),並且其輸出/錯誤將被重定向到文件。
- 這是否僅僅意味著如果我註銷後台程序將停止並且守護程序將繼續執行?
後台程序可以被保護,
nohup
但除非它的輸出被重定向,否則關閉終端會阻止它寫入,產生一個可能會停止它的錯誤。
- 我想知道是否有任何風險/如果這是不好的做法。
除了跟踪程序的輸出(和錯誤消息)的問題之外,如果它碰巧死了,還有重新啟動它的問題。服務腳本適合系統上其他服務的設計方式,提供或多/少的標準方式來控制守護程序。