守護進程爲什麼要fork兩次?

上一篇博客講了,fork的作用,那麼爲什麼有時候有些代碼會調用兩次fork呢?

(1)調用一次fork的作用:
    第一次fork的作用是讓shell認爲這條命令已經終止,不用掛在終端輸入上,還有就是爲了後面的setsid服務,因爲調用setsid函數的進程不能是進程組組長,如果不fork出子進程,則此時的父進程是進程組組長,就無法調用setsid。當子進程調用完setsid函數之後,子進程是會話組長也是進程組組長,並且脫離了控制終端,此時,不管控制終端如何操作,新的進程都不會收到一些信號使得進程退出。
(2)第二次fork的作用:
雖然當前關閉了和終端的聯繫,但是後期可能會誤操作打開了終端。
只有會話首進程能打開終端設備,也就是再fork一次,再把父進程退出,再次fork的子進程作爲守護進程繼續運行,保證了該精靈進程不是對話期的首進程
第二次不是必須的,是可選的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章