不管是unix環境高級編程還是網絡上都說創建daemon的步驟是:
1. fork
2. setsid創建新session
3. 父進程exit
這樣子進程就能脫離terminal了.
這樣子確實沒錯, 我之前以為這是為了避免子進程被強制退出, 所以才要脫離terminal和父進程.
但是在實驗的時候發現, 沒有setsid, 僅僅fork一個子進程並讓子進程無限循環, 父進程fork之後exit, 子進程並沒有隨之結束. 仍然在運行. 同樣我在終端輸入exit命令之後, 子進程仍然還在運行. 也就是說子進程並不會被強制退出, 那還要創建新的session干嘛?
fork子進程後,它會繼承父進程所有相關的上下文信息,setsid就是來創建一個新的session,從而清除這些無關信息。