守護進程爲什麼要fork兩次?
上一篇博客講了,fork的作用,那麼爲什麼有時候有些代碼會調用兩次fork呢?
(1)調用一次fork的作用:
第一次fork的作用是讓shell認爲這條命令已經終止,不用掛在終端輸入上,還有就是爲了後面的setsid服務,因爲調用setsid函數的進程不能是進程組組長,如果不fork出子進程,則此時的父進程是進程組組長,就無法調用setsid。當子進程調用完setsid函數之後,子進程是會話組長也是進程組組長,並且脫離了控制終端,此時,不管控制終端如何操作,新的進程都不會收到一些信號使得進程退出。
(2)第二次fork的作用:
雖然當前關閉了和終端的聯繫,但是後期可能會誤操作打開了終端。
只有會話首進程能打開終端設備,也就是再fork一次,再把父進程退出,再次fork的子進程作爲守護進程繼續運行,保證了該精靈進程不是對話期的首進程,
第二次不是必須的,是可選的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
C語言實現的json解析程序
lindorx
2020-07-08 10:35:53
Pytorch垃圾分類搭建CNN模型中遇到的坑
wxfu2010
2020-07-08 09:59:08
項目中權限分配使用到的位運算
JAVAWeb小将
2020-07-08 09:13:30
Maven相關問題彙總
maven中的${project.groupId} 和 ${project.version} 表示當前項目的groupId和版本。
JAVAWeb小将
2020-07-08 09:13:30
ElasticSearch使用教程四(ElasticSearch查詢詳解)
ilifee
2020-07-08 04:10:56
143. Reorder List學習
ilifee
2020-07-08 04:10:45
SpringBoot項目部署到linux服務器
科比333
2020-07-08 02:35:43
SpringCloud Stream 整合 RabbitMQ-消費失敗後重試
科比333
2020-07-08 02:35:43
Nacos(三)-Nacos Spring Cloud-配置中心
科比333
2020-07-08 02:35:43
SpringCloud Stream 整合RabbitMQ
科比333
2020-07-08 02:35:43
Nacos(二)-Nacos Spring Cloud-註冊中心
科比333
2020-07-08 02:35:43
SpringBoot項目部署到linux服務器之環境搭建
科比333
2020-07-08 02:35:43