欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:chrome 進程守護化

柚子快報激活碼778899分享:chrome 進程守護化

http://yzkb.51969.com/

文章目錄

概念引入ps細節(jié)展示什么是進程組什么是會話細節(jié)演示有關(guān)指令的處理

用戶級任務(wù)和進程組的關(guān)系關(guān)系不同

什么是守護進程如何創(chuàng)建守護進程

代碼說明如何關(guān)閉守護進程

問題

概念引入

我們在之前的章節(jié)中已將看過進程相關(guān)的概念, 本篇介紹守護進程 進程還有進程組, 作業(yè), 會話的概念 終端進程的啟動父進程都是bash

ps細節(jié)展示

當(dāng)我們在終端輸入sleep10000, 查看這個進程相關(guān)的信息

其中的信息是 SID表示是會話 STAT表示狀態(tài) TTY表示是當(dāng)前打開的終端是誰 UID表示用戶身份, 當(dāng)前sleep進程是以用戶UID為1000的用戶執(zhí)行的進程 可以看到這個sleep進程的PID和PGID一樣, 這樣的進程自成進程組 即進程的PID和PGID一樣, 這樣的進程自成進程組 進程組默認是在一個會話中的

什么是進程組

當(dāng)輸入指令 sleep 1000 | sleep 2000 | sleep 3000 時 同時啟動的多個進程, 是屬于同一個進程組的 每次登陸Linux, 系統(tǒng)都會給用戶提供,

bash提供一個終端, 用于給用戶提供命令行解析服務(wù)

什么是會話

其中, 這個1和2在一起, 這個叫一個會話 在命令行中啟動的所有的進程, 最終默認都是在當(dāng)期會話內(nèi)部的一個進程組(可以是一個進程自成為進程組)

當(dāng)我們建立三個終端時, 此時查看bash進程 對于每一個bash都是自成進程組, 自成會話

清理所有的任務(wù), 首先執(zhí)行sleep 100000 再執(zhí)行, sleep 20000 |sleep 300000 | sleep 40000 再次查看進程信息

其中sleep 100000 是自成進程組, 自成會話 另外三個是為一組進程組, 但因為是同屬一個終端的指令, 所以是屬于一個會話 畫圖演示具體細節(jié):

細節(jié)演示

有關(guān)指令的處理

1.jobs查看當(dāng)前會話中的所有進程 2. ctrl + z將當(dāng)前進程放在后臺

放在后臺的應(yīng)用, 默認從1開始有作業(yè)編號放在后臺的進程, 默認會處于stopped, 可以使用bg %作業(yè)編號的方式, 恢復(fù)進程為running, 也可以使用bg, 不加編號, 默認是最近的一次被掛起(ctrl + z)的作業(yè)使用指令fg %+作業(yè)編號的數(shù)字, 可以將任務(wù)放在前臺, 也可以簡單使用fg, 不加編號也行, 與上述同理

用戶級任務(wù)和進程組的關(guān)系

關(guān)系

進程組: 技術(shù)方面的表述用戶級任務(wù): 用戶級概念

不同

每次啟動Linux都會創(chuàng)建一個新的會話, 會話與會話之間是隔離的

每次啟動的進程是受到用戶登錄和注銷影響的, 如果這個進程出現(xiàn)異常, 那么有可能會導(dǎo)致這個bash會話被關(guān)閉, 這與OS的處理機制有關(guān) 現(xiàn)在想讓我們的服務(wù)(進程), 不受用戶的登錄和注冊影響, 那么只需要 把這個進程變成守護進程

什么是守護進程

守護進程是一個獨立的會話不隸屬于任何一個bash會話

如何創(chuàng)建守護進程

使用setsid接口 進程在調(diào)用這個會話的時候, 該進程會自己成為一個會話, 未來這個會話中只有我自己 前提是, 這個進程不是進程組的組長, 組長一般是多個進程的第一個 所以要成功調(diào)用, 一般是創(chuàng)建子進程, 讓父進程直接退出 即守護進程一定是孤兒進程, 他的父進程一定是bash進程(1)

代碼說明

Deamon.hpp

#pragma once

#include

#include

#include

#include

#include

#include

#include

#include

const char *root = "/";

const char *dev_null = "/dev/null";

void Deamon(bool ischdir, int isclosefd)

{

// 1.忽略可能引起進程異常的信號(取決于應(yīng)用場景)

signal(SIGCHLD, SIG_IGN);

signal(SIGPIPE, SIG_IGN);

// 2.讓自己不要成為組長

if (fork() > 0)

exit(0); // 父進程退出

// 3.設(shè)置讓自己成為一個新的會話, 后面的代碼是子進程在走

setsid();

// 4.每一個進程都有自己的CWD(PWD的路徑), 是否將當(dāng)前進程的CWD設(shè)置成根目錄(好處是, 這樣的頂級方式查找)

// 1. 防止依賴臨時文件

// 守護進程通常不需要訪問任何特定的文件或目錄。如果守護進程在其啟動時的工作目錄中創(chuàng)建了臨時文件或其他資源,可能會導(dǎo)致不必要的依賴。將 CWD 設(shè)置為根目錄可以確保守護進程不會依賴于任何特定的工作目錄。

// 2. 避免權(quán)限問題

// 如果守護進程在其啟動時的工作目錄中創(chuàng)建文件或修改文件,可能會遇到權(quán)限問題。例如,如果守護進程運行在非特權(quán)用戶賬戶下,而該用戶的家目錄或工作目錄可能不具備相應(yīng)的寫權(quán)限,這會導(dǎo)致守護進程無法正常工作。將 CWD 設(shè)置為根目錄可以避免這些問題。

// 3. 減少對系統(tǒng)的影響

// 將 CWD 設(shè)置為根目錄可以減少守護進程對其啟動環(huán)境的依賴,從而減少其對系統(tǒng)的影響。這意味著守護進程不會意外地修改或依賴于其啟動時的工作目錄中的文件或目錄。

// 4. 便于管理和維護

// 將 CWD 設(shè)置為根目錄可以使守護進程的管理和維護更加簡單。例如,如果守護進程需要在日志中記錄其工作目錄,將 CWD 設(shè)置為根目錄可以確保日志的一致性和可預(yù)測性。

// 5. 避免掛載點問題

// 如果守護進程在其啟動時的工作目錄位于一個掛載點上(例如,一個可移動設(shè)備或網(wǎng)絡(luò)文件系統(tǒng)),那么如果該掛載點變得不可用(例如,設(shè)備斷開連接或網(wǎng)絡(luò)中斷),守護進程可能會出現(xiàn)問題。將 CWD 設(shè)置為根目錄可以避免這些問題。

if (ischdir)

chdir(root); // 更改目錄為根目錄

// 5.守護進程是一個獨立的會話, 不需要和用戶的輸入輸出進行關(guān)聯(lián), 關(guān)閉標(biāo)準輸入輸出(不推薦, 萬一真的存在從哪個文件讀取輸入到另一個文件, 此時就會出錯)

// 所以好的做法是使用 /dev/null, 向這個文件寫入的任何東西都會丟棄, 讀的時候讀到文件結(jié)尾

int fd = open(dev_null, O_RDWR);

if (isclosefd) // 是否是直接關(guān)閉文件描述符的方式

{

close(0);

close(1);

close(2);

}

else // 重定向到null文件的形式

{

if (fd > 0)

{

// int dup2(int oldfd, int newfd);

dup2(fd, 0);

dup2(fd, 1);

dup2(fd, 2);

close(fd);

}

}

}

main.cc

#include "Daemon.hpp"

#include

int main()

{

// 守護進程

Deamon(false, false);

// 要執(zhí)行的核心代碼

while(1)

{

sleep(1);

}

return 0;

}

結(jié)果演示 父進程為bash, 為一個會話組 其中, 這個tty為?, 表示終端無關(guān)性

當(dāng)關(guān)閉這個終端, 再次啟動查看, 他還是存在, 且信息表示的內(nèi)容與當(dāng)期一樣 查看信息 ls /proc/3596 -l, 里面都是該守護進程系相關(guān)的信息 在查看這個fd文件夾查看文件描述符信息

如何關(guān)閉守護進程

那要停止這個守護進程就需要使用kill -9 ID, 更推薦使用信號處理機制, 在代碼當(dāng)中, 發(fā)送某個信號時, 首先會進行資源的安全關(guān)閉, 再進行退出操作, 這邊就不再修改 當(dāng)然相比上述的守護進程的啟動, 更推薦使用這樣的方式來啟動

問題

系統(tǒng)有沒有提供進程變?yōu)槭刈o進程的方式呢? 之前的tcpserver udpserver怎么轉(zhuǎn)化為守護進程呢? 以tcpserver為例: server是在Main.cc文件內(nèi)的, 所以對此進行修改, 還要將名字改為tcp_serverd, 這樣專業(yè)一點, 因為守護進程都是以d結(jié)尾的, 就像mysql 的服務(wù)叫做mysqld 同時, tcpserver的日志顯示是要保存在文件中更好一點的

綜上, 這個代碼可以為: 其他的不變, 這樣一個服務(wù)器的雛形就有了 日志正常

serverd啟動正常, 服務(wù)正常 守護進程完成

柚子快報激活碼778899分享:chrome 進程守護化

http://yzkb.51969.com/

相關(guān)鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19555600.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄