0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編寫daemon進程需要遵循哪些規(guī)則?

Linux愛好者 ? 來源:Linux愛好者 ? 作者:Liao Tonglang ? 2020-12-07 16:24 ? 次閱讀

Daemon 進程生命周期長且在后臺運行。編寫daemon進程需要遵循哪些規(guī)則呢?

1、執(zhí)行fork()函數(shù),父進程退出,子進程繼續(xù)

執(zhí)行這一步,原因有兩個:

父進程可能是進程組的組長,從而不能夠執(zhí)行后面要執(zhí)行的setsid函數(shù)。

子進程繼承了父進程的進程組ID,一定不會是進程組組長,所以子進程一定可以執(zhí)行setsid。

如果daemon是從終端命令行啟動的,那么父進程退出后,shell會顯示shell提示符,讓子進程在后臺執(zhí)行。

2、子進程執(zhí)行下面三個步驟

修改當前目錄為根目錄 如果當前工作路徑上包含根文件系統(tǒng)以外的文件系統(tǒng),那么這個文件系統(tǒng)將不能被卸載。

當然也可以改成其它合適的目錄。這里使用函數(shù)chdir("/")。

調(diào)用setsid 這是為了切斷與控制終端的所有關(guān)系,創(chuàng)建一個新的會話。

此時無論終端是否發(fā)送SIGIN、SIGQUIT或者SIGTSTP或者斷開,都與daemon進程無關(guān)。

使用umask(0)設(shè)置文件模式創(chuàng)建掩碼為0 這一步的目的是讓daemon進程創(chuàng)建文件的權(quán)限屬性與shell脫離關(guān)系。

因為默認情況下,進程的umask來源于父進程shell的umask。如果不執(zhí)行umask(0),那么父進程的shell就會影響daemon,造成daemon每次執(zhí)行的umask信息不一致。

3、再次執(zhí)行fork,父進程退出,子進程繼續(xù)

執(zhí)行完前面兩步之后,新建了會話,進程是會話的首進程,也是進程組的首進程;進程ID,進程組ID,會話ID相同;進程和終端失去聯(lián)系。

但是還差一步。daemon進程有可能會打開一個終端設(shè)備:

intfd=open("/dev/console",O_RDWR);這個設(shè)備是否會成為daemon進程的控制終端,取決于兩點:

daemon進程是不是會話的首進程。

系統(tǒng)實現(xiàn)。(BSD的實現(xiàn)不會成為daemon的控制終端,但POSIX由具體實現(xiàn)決定)。

為了萬無一失,需要使用fork()確保daemon不是會話的首進程。

4、關(guān)閉stdin,stdout,stderr

關(guān)閉之后應該打開/dev/null將0,1,2描述符指向它。這是為了防止后面執(zhí)行0,1,2上的I/O時出現(xiàn)錯誤。

C庫的daemon函數(shù)和這個流程相似,但沒有第二次fork。

原文標題:Daemon 進程的創(chuàng)建

文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3616

    瀏覽量

    93740
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62633

原文標題:Daemon 進程的創(chuàng)建

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    村田代理商告訴你貼片電容選用的規(guī)則

    在選擇貼片電容時,需要遵循一系列一般規(guī)則,以確保所選電容能夠滿足電路的設(shè)計需求并具備較高的可靠性和穩(wěn)定性。以下是一些關(guān)鍵的選用規(guī)則: 一、電路需求分析 確定電容的作用: 首先要明確貼片
    的頭像 發(fā)表于 12-23 15:09 ?122次閱讀

    深入解析Linux程序與進程

    關(guān)于某個數(shù)據(jù)集合的一次運行活動。作為系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。 程序與進程的關(guān)系 進程的狀態(tài) 基礎(chǔ)進程狀態(tài) 創(chuàng)建狀態(tài):進程在創(chuàng)建時
    的頭像 發(fā)表于 12-18 11:01 ?88次閱讀
    深入解析Linux程序與<b class='flag-5'>進程</b>

    芯盾時代參與編寫零信任相關(guān)標準

    參加會議,就《標準》草案展開全面、深度的討論,并明確了下一階段的工作計劃和目標?!稑藴省返?b class='flag-5'>編寫工作取得了重要進展,編寫進程穩(wěn)步、有序推進。
    的頭像 發(fā)表于 11-05 11:07 ?664次閱讀

    改造數(shù)據(jù)中心需要遵循這五大規(guī)則

    在數(shù)據(jù)中心改造過程中,數(shù)據(jù)存儲問題可能是最艱巨的障礙,以下關(guān)于實現(xiàn)數(shù)據(jù)中心的改造的五大規(guī)則,可能會對您有所啟發(fā)。 ? 1.使存儲虛擬化更容易 為了實現(xiàn)數(shù)據(jù)中心的改造,首先實現(xiàn)存儲虛擬化。但是,這項
    的頭像 發(fā)表于 10-31 11:02 ?155次閱讀

    【軟件干貨】Android應用進程如何?;??

    在Android應用程序中,為了保證應用的正常運行和穩(wěn)定性,有時需要對應用進程進行?;睢R韵率且恍崿F(xiàn)進程?;畹姆椒ǎ?/div>
    的頭像 發(fā)表于 10-15 17:05 ?431次閱讀
    【軟件干貨】Android應用<b class='flag-5'>進程</b>如何保活?

    【每天學點AI】五個階段帶你了解人工智能大模型發(fā)展史!

    20世紀50年代NLP的早期研究主要基于規(guī)則的方法,依賴于語言學專家手工編寫規(guī)則和詞典。這些規(guī)則通常是關(guān)于語法、語義和句法結(jié)構(gòu)的人工規(guī)則。
    的頭像 發(fā)表于 09-25 16:51 ?483次閱讀
    【每天學點AI】五個階段帶你了解人工智能大模型發(fā)展史!

    DTU的設(shè)備號都在什么情況下需要填寫呢?填寫的規(guī)則是什么?

    DTU的設(shè)備號都在什么情況下需要填寫,填寫的規(guī)則是什么?
    發(fā)表于 07-26 08:18

    高速pcb布線規(guī)則有哪些

    高速pcb布線規(guī)則有哪些 高速PCB布線規(guī)則 摘要:隨著電子技術(shù)的快速發(fā)展,高速PCB設(shè)計變得越來越重要。為了確保信號完整性和電磁兼容性,遵循一定的布線規(guī)則至關(guān)重要。本文將詳細介紹高速
    的頭像 發(fā)表于 06-10 17:33 ?869次閱讀

    嵌入式系統(tǒng)中C語言的編寫規(guī)范

    最重要的一條規(guī)則 編寫代碼時最重要的一條規(guī)則是:檢查周圍的代碼并嘗試模仿它。 作為維護人員,如果收到的補丁明顯與周圍代碼的編碼風格不同,這是令人沮喪的。這是不尊重人的,就像某人穿著泥濘的鞋子走進
    的頭像 發(fā)表于 05-11 08:49 ?1141次閱讀

    FPGA入門必備:Testbench仿真文件編寫實例詳解

    編寫完HDL代碼后,往往需要通過仿真軟件Modelsim或者Vivadao自帶的仿真功能對HDL代碼功能進行驗證,此時我們需要編寫Testbench文件對HDL功能進行測試驗證。
    發(fā)表于 04-29 10:43 ?2064次閱讀

    降低RF電路寄生信號的八個設(shè)計規(guī)則

    RF產(chǎn)品電路布局要想降低寄生信號,需要RF工程師發(fā)揮創(chuàng)造性。記住以下這八條規(guī)則,不但有助于加速產(chǎn)品上市進程,而且還可提高工作日程的可預見性。規(guī)則1:接地通孔應位于接地參考層開關(guān)處流經(jīng)所
    的頭像 發(fā)表于 04-24 08:05 ?970次閱讀
    降低RF電路寄生信號的八個設(shè)計<b class='flag-5'>規(guī)則</b>

    如何優(yōu)化 PCB 布線規(guī)則?

    而言,限制或是規(guī)則非常重要;一如我們從小就要學會遵守社會與法律規(guī)則。同理,為PCB制定規(guī)則應當受到重視。雖然為此需要花費時間進行研究并投入精力,但設(shè)置這些限制條件
    的頭像 發(fā)表于 02-19 13:00 ?1237次閱讀
    如何優(yōu)化 PCB 布線<b class='flag-5'>規(guī)則</b>?

    HarmonyOS跨進程通信—IPC與RPC通信開發(fā)

    使用Binder驅(qū)動,用于設(shè)備內(nèi)的跨進程通信,后者使用軟總線驅(qū)動,用于跨設(shè)備跨進程通信。需要進程通信的原因是因為每個進程都有自己獨立的資源
    的頭像 發(fā)表于 02-02 17:47 ?1289次閱讀
    HarmonyOS跨<b class='flag-5'>進程</b>通信—IPC與RPC通信開發(fā)

    pcb設(shè)計布局布線原則及規(guī)則

    的不良影響。在進行PCB布線設(shè)計時,需要遵循一定的規(guī)則和原則,下面我們將會介紹PCB設(shè)計中的六大布線規(guī)則。 PCB設(shè)計六大布線規(guī)則 一:按照
    的頭像 發(fā)表于 01-22 09:23 ?2117次閱讀

    pcb走線的規(guī)則設(shè)置方法介紹

    規(guī)則的設(shè)置方法,以確保設(shè)計的可靠性和性能。 一、規(guī)則的制定前提 在制定PCB走線規(guī)則之前,有幾個前提需要清楚。 設(shè)備要求:首先,根據(jù)實際設(shè)備要求考慮PCB的尺寸、限制
    的頭像 發(fā)表于 01-09 10:45 ?2593次閱讀