daemon 需要fork兩次原因

2021-08-01 22:29:40 字數 525 閱讀 2176

參考文章:

第一次fork後子程序繼承了父程序的程序組id,但具有乙個新的程序id,這就保證了子程序不是乙個程序組的首程序

也就是說第一次fork的的子程序的sid pgid都是首程序繼續來的也就是主程序的   然後setsid是為了跟主程序的sid pgid脫離 都設定成子程序的sid pgid,雖然此時子程序已經被1接管了  但是只有setsid之後才算是跟那個主程序完全脫離,不受他的影響

第2次fork不是必須的。也看到很多開源服務沒有fork第二次。fork第二次主要目的是。防止程序再次開啟乙個控制終端。因為開啟乙個控制終端的前提條件是該程序必須是會話組長。再fork一次,子程序id != sid(sid是程序父程序的sid)。所以也無法開啟新的控制終端。

此時這個子程序是首程序了 ,然後此時為了避免他是首程序,所以又fork了一次

然後總結就是:第一次fork和setsid是為了完全脫離主程序  第二次的fork純粹就是為了讓他不是首程序而已

daemon 程序為什麼要fork兩次

daemon 程序為什麼要fork兩次 daemon程序是後台守護程序,有時候也叫精靈程序 agent linux下server都是daemon程序。相信大部分開發人員都知道如何去寫乙個daemon程序。但是另一方面,大部分人不知道為什麼要這麼做,不少人是從某個地方copy乙個函式,拿來主義。但是具...

daemon 程序為什麼要fork兩次

daemon程序是後台守護程序,有時候也叫精靈程序 agent linux 下server都是daemon程序。相信大部分開發人員都知道如何去寫乙個daemon程序。但是另一方面,大部分人不知道為什麼要這麼做,不少人是從某個地方copy乙個函式,拿來主義。但是具體為什麼這麼實現,卻不是很透徹。見過一...

關於兩次fork

兩次fork 的作用 首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork 就是為了解決這些相關的問題而出現的一種程式設計方法。孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 return 或exit 如下圖1所示 在一定時間內,當系統發現孤兒程序時,ini...