国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

守護(hù)進(jìn)程(初學(xué)者必備)

這篇具有很好參考價值的文章主要介紹了守護(hù)進(jìn)程(初學(xué)者必備)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一.進(jìn)程組和會話

二.守護(hù)進(jìn)程的概念

三.守護(hù)線程的特點

四.守護(hù)進(jìn)程創(chuàng)建的基本步驟


一.進(jìn)程組和會話

1.進(jìn)程組的相關(guān)概念:

進(jìn)程除了有進(jìn)程的PID之外還有一個進(jìn)程組,進(jìn)程組是由一個進(jìn)程或者多個進(jìn)程組成。通常他們與同一作業(yè)相關(guān)聯(lián)可以收到同一終端的信號

每個進(jìn)程組有唯一的進(jìn)程組ID,每個進(jìn)程組有一個進(jìn)程組組長。如何判斷一個進(jìn)程是不是這個進(jìn)程組的組長了,通常進(jìn)程組ID等于進(jìn)程ID那么這個進(jìn)程就是對應(yīng)進(jìn)程組的組長。

2.會話的相關(guān)概念

會話是有一個或者多個進(jìn)程組組成的集合

一個會話可以有一個終端,建立與控制終端連接的會話首進(jìn)程被成為控制進(jìn)程,一個會話的幾個進(jìn)程組可以分為前臺進(jìn)程和后臺進(jìn)程,而這些進(jìn)程組的控制終端相同也就是sesion id是一樣的當(dāng)用戶使用ctr +c 產(chǎn)生SIGINT信號時內(nèi)核會發(fā)送信號給相應(yīng)前臺進(jìn)程組的所有進(jìn)程如果我運(yùn)行一個程序我們想要把他放到后臺運(yùn)行我們可以在可執(zhí)行程序的后面加一個& 舉個列子:./test & 如果我們想要把他提到前臺進(jìn)程我們可以使用fg

二.守護(hù)進(jìn)程的概念

守護(hù)進(jìn)程也叫做精靈進(jìn)程,是運(yùn)行在后臺的一種特殊進(jìn)程他獨立于控制終端并且可以周期性的執(zhí)行某種任務(wù)或者等待處理某些發(fā)生的事件。

守護(hù)進(jìn)程是非常有用的進(jìn)程,在Linux當(dāng)中大多數(shù)服務(wù)器用的就是守護(hù)進(jìn)程比如Web服務(wù)器httpd等,同時守護(hù)進(jìn)程完成很多系統(tǒng)的任務(wù)。當(dāng)Linux系統(tǒng)啟動的時候,會啟動很多系統(tǒng)服務(wù),這些進(jìn)程服務(wù)是沒有終端的也就是說你把終端關(guān)閉了這些系統(tǒng)服務(wù)是不會停止的,他們一直運(yùn)行著他們有一個名字就叫做守護(hù)進(jìn)程。

我們可以使用ps ajx來查看系統(tǒng)中的進(jìn)程

參數(shù)說明:

  • a代表不僅列出當(dāng)前用戶的進(jìn)程并且其他用戶的進(jìn)程也會被列出
  • 參數(shù)x表示不僅列出所有控制終端的進(jìn)程也列出所有無控制終端的進(jìn)程
  • 參數(shù)j表示列出也作業(yè)控制相關(guān)的進(jìn)程

下面我們使用ps axj來查看系統(tǒng)中的守護(hù)進(jìn)程

守護(hù)進(jìn)程(初學(xué)者必備)

?其中TTY為?號的都表示這個進(jìn)程和終端沒有關(guān)系。

三.守護(hù)線程的特點

守護(hù)進(jìn)程是一種長期運(yùn)行的進(jìn)程,這種進(jìn)程在后臺運(yùn)行并且不根任何控制終端關(guān)聯(lián)其主要特點如下:

  • 生存周期長[不是必須]:一般是操作系統(tǒng)啟動的時候他啟動,操作系統(tǒng)關(guān)閉的時候他也關(guān)閉

  • 守護(hù)進(jìn)程和終端沒有關(guān)聯(lián),也就是說他們沒有控制終端,所以你控制終端退出也不會導(dǎo)致守護(hù)進(jìn)程退出

  • 守護(hù)進(jìn)程是在后臺運(yùn)行不會占著終端,終端可以執(zhí)行其它命令

linux操作系統(tǒng)本來就有很多的守護(hù)進(jìn)程默默運(yùn)行,維持系統(tǒng)的正常活動大概有30到50個,?ps -efj ppid為0的進(jìn)程為內(nèi)核進(jìn)程,跟隨系統(tǒng)啟動聲明周期是隨內(nèi)核的,cmd列帶[]的這種叫內(nèi)核守護(hù)進(jìn)程,老主init也是守護(hù)進(jìn)程負(fù)責(zé)啟動各運(yùn)行層次特定的系統(tǒng)服務(wù),所以很多進(jìn)程的ppid是init.并且這個init進(jìn)程也負(fù)責(zé)收養(yǎng)孤兒進(jìn)程,cmd列不帶[]我們稱為普通守護(hù)進(jìn)程,也叫做用戶守護(hù)進(jìn)程。

四.守護(hù)進(jìn)程創(chuàng)建的基本步驟

1.設(shè)置權(quán)限掩碼,調(diào)用umask(0)權(quán)限掩碼不會對文件的權(quán)限有太多的影響

2.父進(jìn)程創(chuàng)建子進(jìn)程,fork一個子進(jìn)程(脫離終端)出來然后父進(jìn)程退出(把終端空出來不讓中端卡住):固定套路。其中fork()的目的是想調(diào)用setsid()來建立新會話目的是子進(jìn)程有單獨的sid,而且子進(jìn)程也成為了一個新進(jìn)程組的組長,同時子進(jìn)程不關(guān)聯(lián)任何終端。(注意:調(diào)用setsid建立新會話的進(jìn)程不能是進(jìn)程組的組長)

3.由于守護(hù)進(jìn)程和終端沒有關(guān)系所以我們需要將子進(jìn)程的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出重定向到dev/null(空設(shè)備當(dāng)中去)所以我們可以使用open函數(shù)打開這個空設(shè)備文件將子進(jìn)程的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出重定向到這個空設(shè)備對應(yīng)的文件當(dāng)中(黑洞確保守護(hù)進(jìn)程不從鍵盤接收任何東西也把任何東西打印到屏幕上)

下面我們來看看創(chuàng)建守護(hù)進(jìn)程的代碼:

#include <iostream>
#include <unistd.h>
#include <signal.h>
#include<sys/stat.h>
#include<cstdlib>
#include<fcntl.h>
//創(chuàng)建守護(hù)進(jìn)程
int ngx_daemon()
{
    int fd;
    switch (fork())//創(chuàng)建子進(jìn)程
    {
    case -1:
    //創(chuàng)建子進(jìn)程失敗這里可以寫日志
        return -1;
    case 0:
       //子進(jìn)程走到這里直接break即可
        break;
    default:
       exit(0);
       //父進(jìn)程退出
        break;
    }
    //只有子進(jìn)程才會走到這里
    if(setsid()==-1)
    {
        //記錄錯誤日志
        return -1;
    }
    umask(0);//設(shè)置權(quán)限掩碼
    fd=open("/dev/null",O_RDWR);//打開黑洞設(shè)備以讀寫方式打開
    if(fd==-1)
    {
         //記錄錯誤日志
         return -1;
    }
    if(dup2(fd,0)==-1)//進(jìn)行重定向
    {
       //記錄錯誤日志
       return -1;
    }

    if(dup2(fd,1)==-1)
    {
        //記錄錯誤日志
        return -1;
    }
    
    if(fd>3)
    {
        if(close(fd)==-1)
        {
            //記錄錯誤日志
            return -1;
        }
    }
    return 1;
}
int main(int argc, char *argv[])
{
    
    if(ngx_daemon()!=1)
    {
        //創(chuàng)建守護(hù)進(jìn)程失敗可以做失敗后的處理比如寫日志等等
       return 1;
    }
    else
    {
        //創(chuàng)建守護(hù)進(jìn)程成功執(zhí)行守護(hù)進(jìn)程要干的活
        for(;;)
        {
            sleep(1);
            //打印了也沒有用因為子進(jìn)程已經(jīng)重定向了,不會打印任何結(jié)果到標(biāo)準(zhǔn)輸出上
            printf("休息一秒,進(jìn)程id=%d!\n",getpid());
        }
    }

    return 0;
}

總結(jié):

1.守護(hù)進(jìn)程不會收到的信號SIGHUP:終端斷開信號守護(hù)進(jìn)程不會收到內(nèi)核SIGHUP信號,如果收到了SIGHUP信號那么肯定是另外的進(jìn)程發(fā)送給你的,很多守護(hù)進(jìn)程把這個信號做為通知信號,表示配置文件已經(jīng)發(fā)生改變守護(hù)應(yīng)該重新讀入其配置文件,同時也不會收到內(nèi)核的SIGINT和SIGWINCH信號。

2.守護(hù)進(jìn)程和后臺進(jìn)程的區(qū)別:

守護(hù)進(jìn)程和終端沒有關(guān)系但是后臺進(jìn)程能往終端上輸出東西和終端有關(guān)聯(lián)

守護(hù)進(jìn)程關(guān)閉終端時不受影響而,后臺進(jìn)程會隨著終端的退出而退出文章來源地址http://www.zghlxwxcb.cn/news/detail-475823.html

到了這里,關(guān)于守護(hù)進(jìn)程(初學(xué)者必備)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QuantumultX 初學(xué)者傻瓜教程

    我這里以“orz”大佬來介紹。 大佬集成了分流、策略、去廣告、比價、boxjs等功能,并給了非常詳細(xì)的任務(wù)訂閱列表,非常方便。 項目地址:https://github.com/Orz-3/QuantumultX TG頻道:https://t.me/Orzmini TG群組:https://t.me/Orz_mini 食用方法:就是把遠(yuǎn)程配置文件下到本地覆蓋再進(jìn)行設(shè)置

    2024年02月08日
    瀏覽(15)
  • C語言初學(xué)者自序

    在這篇博客的開頭,我首先說明,本人是金融專業(yè)大一的菜鳥。為什么會學(xué)習(xí)C語言以及與計算機(jī)的不解之緣,我會在下面一一解答。 我與計算機(jī)的故事,得從我幼年時說起。當(dāng)然,這不是老太婆裹腳——又臭又長的故事。畢竟我自己也時時回顧這段經(jīng)歷,它有如晨鐘暮鼓。

    2023年04月09日
    瀏覽(28)
  • linux初學(xué)者小命令

    進(jìn)程 :進(jìn)程是一個具有一定獨立功能的程序在一個數(shù)據(jù)集上的一次動態(tài)執(zhí)行的過程,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位,是應(yīng)用程序運(yùn)行的載體。 bash執(zhí)行命令的過程,以’ls’命令為例: 第一步. 讀取輸入信息 :shell通過STDIN(標(biāo)準(zhǔn)輸入)的getline()函數(shù)得到用戶的輸入

    2024年02月13日
    瀏覽(22)
  • ChatGPT初學(xué)者最佳實踐

    ChatGPT初學(xué)者最佳實踐

    2022年11月底,ChatGPT引爆了新一輪AI的革命,也讓人們意識到AI真的能夠大幅度提高人們的工作效率,甚至有人擔(dān)心自己的工作會因為AI不保。這種居安思危的意識是正確的,但是正如錛鑿斧鋸的出現(xiàn),并沒有讓木匠這個行業(yè)消失,而是讓這個行業(yè)以更高效的方式工作。所以作為

    2024年02月05日
    瀏覽(20)
  • 初學(xué)者怎么學(xué)習(xí)c++(合集)

    初學(xué)者怎么學(xué)習(xí)c++(合集)

    ? 學(xué)習(xí)c++方法1 找一本好的書本教材,輔助看教學(xué)視頻。好的教材,可以讓你更快更好的進(jìn)入C/C++的世界。在校學(xué)生的話,你們的教材通常都是不錯的。如果是自學(xué),推薦使用譚浩強(qiáng)出的C/C++經(jīng)典入門教材??匆曨l是學(xué)習(xí)比較直觀的方式。建議先看課本,不懂的地方,更看視頻

    2024年02月16日
    瀏覽(29)
  • 初學(xué)者:8個JavaScript技巧

    有很多方法可以優(yōu)化我們的 JavaScript 代碼,本文總結(jié)了我在工作中經(jīng)常使用的 8 個 JavaScript 技巧,希望它也能幫助你。 在編寫兩個以上的 if ... else 時,是否有更好的優(yōu)化方法? 如下代碼,我們需要根據(jù)一個漢堡包的名字來計算它的價格。 更好的寫法 ? 現(xiàn)在,如果讓你找到屬

    2024年02月12日
    瀏覽(19)
  • Advanced Solidity初學(xué)者教程

    Advanced Solidity初學(xué)者教程

    目錄 Advanced Solidity 引言: 1. 數(shù)學(xué)和算術(shù) 2. 時間和時間單位 3. 結(jié)構(gòu)體 4. 修飾器 5. 枚舉 6. 繼承 7. 抽象合約 8. 接口 9. 庫 10. 存儲位置 Advanced Solidity(高級Solidity)是一種區(qū)塊鏈編程語言Solidity的深入應(yīng)用,通常用于構(gòu)建智能合約和去中心化應(yīng)用(DApps)。它涉及復(fù)雜的編程概念

    2024年04月28日
    瀏覽(21)
  • 初學(xué)者該如何入手云計算

    妥妥的適合零基礎(chǔ)入門云計算專業(yè)的學(xué)習(xí)路徑,請收好。 我們將云計算的學(xué)習(xí)劃分為4個階段,基礎(chǔ)階段、初級階段、應(yīng)用階段、進(jìn)階階段。 (1)基礎(chǔ)階段 在基礎(chǔ)階段需要掌握通用的知識,有了扎實的基礎(chǔ)后面才能走的更遠(yuǎn),比如計算機(jī)組成原理、計算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、

    2024年02月02日
    瀏覽(32)
  • 初學(xué)者關(guān)于ConvLSTM的理解

    初學(xué)者關(guān)于ConvLSTM的理解

    最近在著手于使用ConvLSTM進(jìn)行時空序列預(yù)測問題,由于本人剛接觸深度學(xué)習(xí),很多代碼都還理不清,故想到自己通過記錄來加深對模型的理解,肯定會有很多問題和不專業(yè)的地方,若有網(wǎng)友看見,請不吝指教,謝謝。 ConvLSTM是施博士在《Convolutional LSTM Network: A Machine Learning Ap

    2024年02月11日
    瀏覽(24)
  • 大語言模型初學(xué)者指南 (2023)

    大語言模型初學(xué)者指南 (2023)

    大語言模型 (LLM) 是深度學(xué)習(xí)的一個子集,它正在徹底改變自然語言處理領(lǐng)域。它們是功能強(qiáng)大的通用語言模型,可以針對大量數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練,然后針對特定任務(wù)進(jìn)行微調(diào)。這使得LLM能夠擁有大量的一般數(shù)據(jù)。如果一個人想將LLM用于特定目的,他們可以簡單地根據(jù)各自的目的

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包