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

【Linux】進(jìn)程篇(補(bǔ)):守護(hù)進(jìn)程

這篇具有很好參考價(jià)值的文章主要介紹了【Linux】進(jìn)程篇(補(bǔ)):守護(hù)進(jìn)程。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


1. 補(bǔ)充

1.1 查看

為了觀察進(jìn)程,我們以在命令提示符處,運(yùn)行 sleep 命令為例。

ps axj | head -1 && ps axj | grep sleep | grep -v grep
得到的信息:
PPID:父進(jìn)程 ID
PID:進(jìn)程 ID
PGID:進(jìn)程組
SID:會(huì)話 ID
TTY:進(jìn)程關(guān)聯(lián)的終端

每登錄一次,都是一個(gè)新的會(huì)話,即每個(gè)會(huì)話關(guān)聯(lián)一個(gè)終端文件,進(jìn)程組的名稱是進(jìn)程組中第一個(gè)進(jìn)程的 PID。

  1. 進(jìn)程組,分為前臺任務(wù)和后臺任務(wù)
  2. 在會(huì)話中,只能有一個(gè)前臺任務(wù)在運(yùn)行
    (解釋了我們在命令行啟動(dòng)一個(gè)進(jìn)程的時(shí)候,bash 就無法工作了的原因)
  3. 每次登錄就是創(chuàng)建一個(gè)新的會(huì)話、bash 任務(wù);啟動(dòng)進(jìn)程,就是在當(dāng)前會(huì)話中創(chuàng)建一個(gè)后臺任務(wù);退出會(huì)話,會(huì)影響會(huì)話內(nèi)部的所有任務(wù)
  4. 一般網(wǎng)絡(luò)服務(wù)器,為了不受到用戶的登陸注銷的影響,網(wǎng)絡(luò)服務(wù)器會(huì)以 守護(hù)進(jìn)程 的方式運(yùn)行!

1.2 控制進(jìn)程組的方式

jobs:查看自己會(huì)話中后臺運(yùn)行的進(jìn)程
fg [任務(wù)號]:將相應(yīng)進(jìn)程提到前臺
ctrl + Z:將前臺運(yùn)行的進(jìn)程暫停,并放入后臺
bg [任務(wù)號]:運(yùn)行后臺暫停的進(jìn)程


2. 創(chuàng)建守護(hù)進(jìn)程

為了不受用戶影響,網(wǎng)絡(luò)服務(wù)器會(huì)將其進(jìn)程單獨(dú)拎出來,使用新的會(huì)話和進(jìn)程組,為此稱守護(hù)進(jìn)程

step1. 忽略信號

signal(SIGPIPE, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
// ...

step2. 讓自己不是組長

要設(shè)置新的會(huì)話和進(jìn)程組 ID,需要使用 setsid 接口,而每個(gè)進(jìn)程組的組長(進(jìn)程組號同自己 PID 的進(jìn)程)是不能舍自己進(jìn)程組不顧的,即使用 setsid 創(chuàng)建新組,必須不能是組長。

if (fork() > 0) exit(0);
  • fork出多進(jìn)程,讓父進(jìn)程退掉,子進(jìn)程繼續(xù)跑,就相當(dāng)于讓出了組長。

  • 本質(zhì)上,守護(hù)進(jìn)程就是 孤兒進(jìn)程 的一種

step3. setsid 函數(shù):給調(diào)用函數(shù)設(shè)置新的會(huì)話和進(jìn)程組 ID

#include <unistd.h>

pid_t setsid(void); 

返回值:

  • 成功返回新的進(jìn)程組 ID,失敗返回 -1,并設(shè)置錯(cuò)誤碼

注意:組長是不能使用該接口的

step4. chdir 函數(shù):可以改變守護(hù)進(jìn)程的工作路徑

非必要步驟

#include <unistd.h>

int chdir(const char *path);

返回值:

  • 成功返回 0,失敗返回 -1,并設(shè)置錯(cuò)誤碼

step5. 處理文件描述符 0、1、2

這里的處理是將這些文件重新向到 /dev/null 中,目的是切斷新會(huì)話和鍵盤等的聯(lián)系。

這里的 /dev/null 是一個(gè)字符設(shè)備,傳進(jìn)的數(shù)據(jù)都會(huì)被直接丟棄。

守護(hù)進(jìn)程類樣例

#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void Daemon()
{
    // 1. 忽略信號
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);
    
    // 2. 讓自己不要成為組長
    if (fork() > 0)
        exit(0);
        
    // 3. 新建會(huì)話,自己成為會(huì)話的話首進(jìn)程
    pid_t ret = setsid();
    if ((int)ret == -1)
    {
        // 日志或打印
        exit(1);
    }
    
    // 4. 可選:可以更改守護(hù)進(jìn)程的工作路徑
    // chdir("/")
    
    // 5. 處理后續(xù)的對于0,1,2的問題
    int fd = open("/dev/null", O_RDWR);
    if (fd < 0)
    {
        // 日志或打印
        exit(2);
    }
    dup2(fd, 0);
    dup2(fd, 1);
    dup2(fd, 2);
    close(fd);
}

??如果本文對你有些幫助,請給個(gè)贊或收藏,你的支持是對作者大大莫大的鼓勵(lì)?。?????) 歡迎評論留言~~文章來源地址http://www.zghlxwxcb.cn/news/detail-707822.html


到了這里,關(guān)于【Linux】進(jìn)程篇(補(bǔ)):守護(hù)進(jìn)程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Linux 服務(wù)器運(yùn)維】定時(shí)任務(wù) crontab 詳解 | 文末送書

    【Linux 服務(wù)器運(yùn)維】定時(shí)任務(wù) crontab 詳解 | 文末送書

    本文思維導(dǎo)圖概述的主要內(nèi)容: 1.1 什么是 crontab Crontab 是一個(gè)在 Unix 和 Linux 操作系統(tǒng)上 用于定時(shí)執(zhí)行任務(wù) 的工具。它允許用戶創(chuàng)建和管理計(jì)劃任務(wù),以便在特定的時(shí)間間隔或時(shí)間點(diǎn)自動(dòng)運(yùn)行命令或腳本。Crontab 是 cron table 的縮寫, cron 指的是 Unix 系統(tǒng)中的一個(gè)后臺進(jìn)程,它

    2024年02月08日
    瀏覽(129)
  • Linux服務(wù)器上查詢進(jìn)程 ps aux

    在Linux服務(wù)器上查詢進(jìn)程,有以下幾種方法: 使用ps命令。這個(gè)命令用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)。可以用以下方式使用ps命令來查看進(jìn)程信息: ps aux:顯示系統(tǒng)中所有進(jìn)程的信息。 ps -e:顯示所有進(jìn)程的信息。 ps -f:顯示進(jìn)程的所有信息。 ps -l:以長格式顯示進(jìn)程信息。

    2024年02月05日
    瀏覽(36)
  • 【Linux運(yùn)維】shell腳本檢查服務(wù)器內(nèi)存和CPU利用率

    在管理服務(wù)器時(shí)候?qū)懥艘粋€(gè) shell腳本,在服務(wù)上實(shí)現(xiàn)每天凌晨3點(diǎn)查系統(tǒng)的指定文件夾下的容量大小,如果超過10G就要?jiǎng)h除3天前的內(nèi)容,還要時(shí)刻查詢內(nèi)存和cpu利用率,如果超過80%就要提示用戶出現(xiàn)過載 將以上代碼保存為一個(gè).sh文件,然后通過crontab在每天凌晨3點(diǎn)運(yùn)行即可:

    2024年02月09日
    瀏覽(33)
  • Linux服務(wù)器中查看進(jìn)程的四種方法

    1. 使用 ps aux 命令來查看,能以簡單列表的形式顯示出進(jìn)程信息 ps aux 用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)??梢源钆鋕ill指令隨時(shí)中斷、刪除不必要的程序. ps 命令是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令,使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)

    2024年02月02日
    瀏覽(33)
  • Linux網(wǎng)絡(luò)編程:多進(jìn)程 多線程_并發(fā)服務(wù)器

    文章目錄: 一:wrap常用函數(shù)封裝 wrap.h? wrap.c server.c封裝實(shí)現(xiàn) client.c封裝實(shí)現(xiàn) 二:多進(jìn)程process并發(fā)服務(wù)器 server.c服務(wù)器 實(shí)現(xiàn)思路 代碼邏輯? client.c客戶端 三:多線程thread并發(fā)服務(wù)器 server.c服務(wù)器 實(shí)現(xiàn)思路 代碼邏輯? client.c客戶端 ???? ??read 函數(shù)的返回值 wrap.h? wrap

    2024年02月12日
    瀏覽(31)
  • Linux服務(wù)器常見運(yùn)維性能測試(1)綜合跑分unixbench、superbench

    Linux服務(wù)器常見運(yùn)維性能測試(1)綜合跑分unixbench、superbench

    最近需要測試一批服務(wù)器的相關(guān)硬件性能,以及在常規(guī)環(huán)境下的硬件運(yùn)行穩(wěn)定情況,需要持續(xù)拷機(jī)測試穩(wěn)定性。所以找了一些測試用例。本次測試包括在服務(wù)器的高低溫下性能記錄及壓力測試,高低電壓下性能記錄及壓力測試,常規(guī)環(huán)境下CPU滿載穩(wěn)定運(yùn)行的功率記錄。 這個(gè)系

    2024年02月04日
    瀏覽(103)
  • Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    1Panel 是一個(gè)現(xiàn)代化、開源的 Linux 服務(wù)器運(yùn)維管理面板。高效管理,通過 Web 端輕松管理 Linux 服務(wù)器,包括主機(jī)監(jiān)控、文件管理、數(shù)據(jù)庫管理、容器管理等 下面我們介紹在Linux 本地安裝1Panel 并結(jié)合cpolar 內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問1Panel 管理界面 執(zhí)行如下命令一鍵安裝 1Panel: 安

    2024年02月04日
    瀏覽(108)
  • 【Linux】TCP的服務(wù)端(守護(hù)進(jìn)程) + 客戶端

    【Linux】TCP的服務(wù)端(守護(hù)進(jìn)程) + 客戶端

    上一節(jié),我們用了udp寫了一個(gè)服務(wù)端和客戶端之間通信的代碼,只要函數(shù)了解認(rèn)識到位,上手編寫是很容易的。 本章我們開始編寫tcp的服務(wù)端和客戶端之前通信的代碼,要認(rèn)識一批新的接口,并將我們之前學(xué)習(xí)的系統(tǒng)知識加進(jìn)來,做到融會(huì)貫通… 代碼詳情:?? Gitee 對于TC

    2024年02月08日
    瀏覽(28)
  • 基于linux下的高并發(fā)服務(wù)器開發(fā)(第二章)- 2.7 進(jìn)程退出、孤兒進(jìn)程、僵尸進(jìn)程

    基于linux下的高并發(fā)服務(wù)器開發(fā)(第二章)- 2.7 進(jìn)程退出、孤兒進(jìn)程、僵尸進(jìn)程

    ? 父進(jìn)程運(yùn)行結(jié)束,但子進(jìn)程還在運(yùn)行(未運(yùn)行結(jié)束),這樣的子進(jìn)程就稱為孤兒進(jìn)程 (Orphan Process)。 ? 每當(dāng)出現(xiàn)一個(gè)孤兒進(jìn)程的時(shí)候,內(nèi)核就把孤兒進(jìn)程的父進(jìn)程設(shè)置為 init ,而 init 進(jìn)程會(huì)循環(huán)地 wait() 它的已經(jīng)退出的子進(jìn)程。這樣,當(dāng)一個(gè)孤兒進(jìn)程凄涼地結(jié)束 了其生

    2024年02月16日
    瀏覽(24)
  • Linux高并發(fā)服務(wù)器開發(fā)---筆記1(環(huán)境搭建、系統(tǒng)編程、多進(jìn)程)

    Linux高并發(fā)服務(wù)器開發(fā)---筆記1(環(huán)境搭建、系統(tǒng)編程、多進(jìn)程)

    0613 首先這整個(gè)系列筆記屬于筆記①:??托U袥_刺集訓(xùn)營—C++工程師中的 第四章 筆記。 視頻課鏈接: 視頻1:Linux高并發(fā)服務(wù)器開發(fā)(40h); 視頻2:第4章 項(xiàng)目制作與技能提升(錄播)(26h30min); 視頻課3: 第5章 高頻考點(diǎn)與真題精講(錄播)中的 5.10-5.13 項(xiàng)目回顧 有個(gè)學(xué)

    2024年02月15日
    瀏覽(108)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包