91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

Linux愛(ài)好者 ? 來(lái)源:Linux愛(ài)好者 ? 作者:Liao Tonglang ? 2020-12-07 16:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Daemon 進(jìn)程生命周期長(zhǎng)且在后臺(tái)運(yùn)行。編寫daemon進(jìn)程需要遵循哪些規(guī)則呢?

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

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

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

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

如果daemon是從終端命令行啟動(dòng)的,那么父進(jìn)程退出后,shell會(huì)顯示shell提示符,讓子進(jìn)程在后臺(tái)執(zhí)行。

2、子進(jìn)程執(zhí)行下面三個(gè)步驟

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

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

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

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

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

因?yàn)槟J(rèn)情況下,進(jìn)程的umask來(lái)源于父進(jìn)程shell的umask。如果不執(zhí)行umask(0),那么父進(jìn)程的shell就會(huì)影響daemon,造成daemon每次執(zhí)行的umask信息不一致。

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

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

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

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

daemon進(jìn)程是不是會(huì)話的首進(jìn)程。

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

為了萬(wàn)無(wú)一失,需要使用fork()確保daemon不是會(huì)話的首進(jìn)程。

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

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

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

原文標(biāo)題:Daemon 進(jìn)程的創(chuàng)建

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

責(zé)任編輯:haq

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

    關(guān)注

    90

    文章

    3716

    瀏覽量

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

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67551

原文標(biāo)題:Daemon 進(jìn)程的創(chuàng)建

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    在Linux系統(tǒng)中,有些基本命令能夠查看到進(jìn)程的信息。例如ps、top、pgrep、pstree等;這些命令為用戶提供了查看和管理Linux進(jìn)程信息的多種功能。通過(guò)合理使用這些命令,用戶可以監(jiān)控
    發(fā)表于 03-02 08:49

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    是靜態(tài)的,不占用系統(tǒng)資源,只有在被執(zhí)行時(shí)才會(huì)轉(zhuǎn)換為進(jìn)程。程序通常有多種表現(xiàn)形式,常見(jiàn)的表現(xiàn)形式如下源代碼形式:使用編程語(yǔ)言(如:C語(yǔ)言)寫成的一系列語(yǔ)句組成,是人類可以閱讀的文本文件;想要執(zhí)行程序,需要
    發(fā)表于 01-26 08:42

    進(jìn)程概念和特征

    進(jìn)程的概念   在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行,此時(shí)它們將失去封閉性,并具有間斷性及不可再現(xiàn)性的特征。為此引入了進(jìn)程(Process)的概念,以便更好地描述和控制程序的并發(fā)執(zhí)行,實(shí)現(xiàn)操作系統(tǒng)
    發(fā)表于 01-15 06:39

    進(jìn)程通信

    訪問(wèn)的共享空間,通過(guò)對(duì)這片共享空間進(jìn)行寫/讀操作實(shí)現(xiàn)進(jìn)程之間的信息交換。在對(duì)共享空間進(jìn)行寫/讀操作時(shí),需要使用同步互斥工具(如 P操作、V操作),對(duì)共享空間的寫/讀進(jìn)行控制。共享存儲(chǔ)又分為兩種:低級(jí)
    發(fā)表于 01-15 06:16

    進(jìn)程的控制

    是:   1. 在該事件的等待隊(duì)列中找到相應(yīng)進(jìn)程的PCB。   2. 將其從等待隊(duì)列中移出,并置其狀態(tài)為就緒狀態(tài)。   3. 把該P(yáng)CB插入就緒隊(duì)列中,等待調(diào)度程序調(diào)度。   需要注意的是,Block原語(yǔ)
    發(fā)表于 01-15 06:05

    解析Linux的進(jìn)程、線程和協(xié)程

    )輕量級(jí):相對(duì)于進(jìn)程,線程的創(chuàng)建和切換開銷較小。 (3)同步與通信:線程之間需要通過(guò)同步機(jī)制(如互斥鎖、信號(hào)量)來(lái)保證數(shù)據(jù)的一致性。 協(xié)程(Coroutine) 協(xié)程是一種輕量級(jí)的用戶態(tài)線程,它們
    發(fā)表于 12-22 11:00

    FT62FC6X 8位微控制器型號(hào)命名規(guī)則,引腳介紹及PORT端口結(jié)構(gòu)框圖

    FT62FC6X系列的型號(hào)命名規(guī)則、引腳介紹以及PORT端口結(jié)構(gòu)框圖,幫助讀者更好地理解和應(yīng)用這一系列微控制器。 ? FT62FC6X型號(hào)命名規(guī)則 FT62FC6X系列微控制器的型號(hào)命名遵循了一套嚴(yán)格的
    的頭像 發(fā)表于 09-18 16:22 ?998次閱讀
    FT62FC6X 8位微控制器型號(hào)命名<b class='flag-5'>規(guī)則</b>,引腳介紹及PORT端口結(jié)構(gòu)框圖

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】—— linux 進(jìn)程創(chuàng)建

    Linux進(jìn)程通信方式有這幾種: 1。管道 2。信號(hào)量 3。消息隊(duì)列 4。共享內(nèi)存 在本帖子中,我會(huì)講解fork(),exit()系統(tǒng)調(diào)用的實(shí)踐。通過(guò)應(yīng)用編程來(lái)實(shí)現(xiàn)系統(tǒng)調(diào)用。 1,進(jìn)程創(chuàng)建 打開
    發(fā)表于 09-01 20:49

    請(qǐng)問(wèn)DTU的設(shè)備號(hào)都在什么情況下需要填寫,填寫的規(guī)則是什么?

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

    KiCad 中的自定義規(guī)則(KiCon 演講)

    設(shè)計(jì)規(guī)則 展開,重點(diǎn)探討了 那些復(fù)雜卻強(qiáng)大的特性。 由于這些規(guī)則本質(zhì)上是基于文本表達(dá)的,需要用戶細(xì)致入微的理解。演講的 核心目標(biāo) 是引導(dǎo)用戶有效實(shí)施這些規(guī)則,從而 規(guī)避布線問(wèn)題、提升制
    的頭像 發(fā)表于 06-16 11:17 ?2167次閱讀
    KiCad 中的自定義<b class='flag-5'>規(guī)則</b>(KiCon 演講)

    需要遵循哪些步驟才能在協(xié)同處理器模式下配置 FX2/FX3?

    FX2/FX3 替換 CY7C67300。 我們需要遵循哪些步驟才能在協(xié)同處理器模式下配置 FX2/FX3? 1。是否需要單獨(dú)編程 FX2/FX3 才能與我們的主控制器接口? 2。GPIF II 支持并行總線接口嗎?
    發(fā)表于 05-26 07:58

    2025年村田電感型號(hào)命名規(guī)則深度解析

    最新命名邏輯。 一、基礎(chǔ)結(jié)構(gòu)解析 村田電感型號(hào)由 12位字符 組成,遵循“LQ+結(jié)構(gòu)+尺寸+應(yīng)用+類別+電感值+精度+特征+電極+包裝”的編碼規(guī)則。例如,典型型號(hào)“LQH32MN331K23L”可拆解為: LQ :片狀線圈(型號(hào)標(biāo)識(shí)) H :繞線型(鐵氧體磁芯結(jié)構(gòu)
    的頭像 發(fā)表于 04-15 14:29 ?1832次閱讀

    需要點(diǎn)表≠無(wú)規(guī)則!深控技術(shù)工業(yè)網(wǎng)關(guān)的智能數(shù)據(jù)映射技術(shù)

    在工業(yè)數(shù)據(jù)采集領(lǐng)域,“無(wú)點(diǎn)表”常被誤解為數(shù)據(jù)采集的“無(wú)序化”,而深控技術(shù)通過(guò)動(dòng)態(tài)數(shù)據(jù)建模與語(yǔ)義化標(biāo)簽自動(dòng)生成技術(shù),重新定義了工業(yè)數(shù)據(jù)治理的規(guī)則體系。
    的頭像 發(fā)表于 04-11 15:21 ?775次閱讀
    不<b class='flag-5'>需要</b>點(diǎn)表≠無(wú)<b class='flag-5'>規(guī)則</b>!深控技術(shù)工業(yè)網(wǎng)關(guān)的智能數(shù)據(jù)映射技術(shù)

    Linux進(jìn)程狀態(tài)詳解

    進(jìn)程狀態(tài)是task_struct內(nèi)的一個(gè)整數(shù);進(jìn)行:進(jìn)程在調(diào)度隊(duì)列中,進(jìn)程的狀態(tài)都是running,阻塞:等待某種設(shè)備或者資源就緒。進(jìn)程是一個(gè)隊(duì)列,設(shè)備也是一個(gè)隊(duì)列,當(dāng)我們讀磁盤,讀網(wǎng)
    的頭像 發(fā)表于 04-01 09:46 ?1168次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>狀態(tài)詳解

    請(qǐng)問(wèn)如何在Python中實(shí)現(xiàn)多線程與多進(jìn)程的協(xié)作?

    大家好!我最近在開發(fā)一個(gè)Python項(xiàng)目時(shí),需要同時(shí)處理多個(gè)任務(wù),且每個(gè)任務(wù)需要不同的計(jì)算資源。我想通過(guò)多線程和多進(jìn)程的組合來(lái)實(shí)現(xiàn)并發(fā),但遇到了一些問(wèn)題。 具體來(lái)說(shuō),我有兩個(gè)任務(wù),一個(gè)是I/O密集型
    發(fā)表于 03-11 06:57