亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

Linux的守護進程簡介

2024-09-05 23:02:21
字體:
來源:轉載
供稿:網友
1. 守護進程簡介

守護進程也稱精靈進程是生存期長的一種進程,它們常常在系統引導裝入時啟動,在系統管比時終止.精靈進程沒有控制終端,它們是在后臺運行的.守護進程是一種很有用的進程.Linux的大多數服務器就是用守護進程實現的.比如,Internet服務器inetd,Web服務器httpd等.同時,守護進程完成許多系統任務.比如,作業規劃進程crond,打印進程lpd等.

所有精靈進程都以超級用戶(用戶ID為0)的優先權運行.沒有一個精靈進程具有控制終端—控制名稱設置為問號、終端前臺進程組ID設置為-1.除update以外的所有精靈進程都是組的首進程,對話期的首進程,是這些進程組和對話期中的唯一進程.的精靈進程的父進程都是init進程.

守護進程最重要的特性是后臺運行.在這一點上DOS下的常駐內存程序TSR與之相似.其次,守護進程與其運行前的環境隔離開來.這些環境包括未關閉的文件描述符,控制終端,會話和進程組,工作目錄以及文件創建掩模等.這些環境通常是守護進程從執行它的父進程(特別是shell)中繼承下來的.,守護進程的啟動方式有其特殊之處.它可以在Linux系統啟動時從啟動腳本/etc/rc.d中啟動,可以由作業規劃進程crond啟動,還可以由用戶終端(通常是shell)執行.

2. 建立守護進程關鍵步驟

創建一個守護進程,有幾個關鍵的步驟,也有幾個地方需要注意,

幾個關鍵的步驟有:

1:清除文件創建權限

2:調用fork,然后使父進程退出

3:調用setsid以創建一個新的會話,有三個目的使調用進程 a:成為新會話的首進程,b:成為新進程的組長進程,c:沒有控制終端

4:切換工作目錄

5:關閉不需要的文件描述符

6:某些守護進程打開/dev/null使其具有文件描述符0,1,2這樣任何一個試圖讀標準輸入寫標準輸出或標準出錯的庫歷程都不會產生任何效果.

需要注意的地方

1:守護進程沒有控制終端,不能與標準輸入輸出出錯進行交互,不能使用printf,通常用syslog來解決守護進程的打印信息

3. 建立守護進程詳細步驟

1. 在后臺運行.

為避免掛起控制終端將Daemon放入后臺執行.方法是在進程中調用fork使父進程終止,讓Daemon在子進程中后臺執行.

if(pid=fork())

exit(0);//是父進程,結束父進程,子進程繼續

2. 脫離控制終端,登錄會話和進程組

有必要先介紹一下Linux中的進程與控制終端,登錄會話和進程組之間的關系:進程屬于一個進程組,進程組號(GID)就是進程組長的進程號(PID).登錄會話可以包含多個進程組.這些進程組共享一個控制終端.這個控制終端通常是創建進程的登錄終端.
控制終端,登錄會話和進程組通常是從父進程繼承下來的.我們的目的就是要擺脫它們,使之不受它們的影響.方法是在第1點的基礎上,調用setsid()使進程成為會話組長:

setsid();

說明:當進程是會話組長時setsid()調用失敗.但第一點已經保證進程不是會話組長.setsid()調用成功后,進程成為新的會話組長和新的進程組長,并與原來的登錄會話和進程組脫離.會話過程對控制終端的獨占性,進程同時與控制終端脫離.

3. 禁止進程重新打開控制終端

現在,進程已經成為無終端的會話組長.但它可以重新申請打開一個控制終端.可以通過使進程不再成為會話組長來禁止進程重新打開控制終端:

if(pid=fork())

exit(0);//結束第一子進程,第二子進程繼續(第二子進程不再是會話組長)

4. 關閉打開的文件描述符

進程從創建它的父進程那里繼承了打開的文件描述符.如不關閉,將會浪費系統資源,造成進程所在的文件系統無法卸下以及引起無法預料的錯誤.按如下方法關閉它們:

for(i=0;i<= max;i ) close(i);

5. 改變當前工作目錄

進程活動時,其工作目錄所在的文件系統不能卸下.一般需要將工作目錄改變到根目錄.對于需要轉儲核心,寫運行日志的進程將工作目錄改變到特定目錄如/tmp,chdir("/")

6. 重設文件創建掩模

進程從創建它的父進程那里繼承了文件創建掩模.它可能修改守護進程所創建的文件的存取位.為防止這一點,將文件創建掩模清除:umask(0);

7. 處理SIGCHLD信號

處理SIGCHLD信號并不是的.但對于某些進程,特別是服務器進程往往在請求到來時生成子進程處理請求.如果父進程不等待子進程結束,子進程將成為僵尸進程(zombie)從而占用系統資源.如果父進程等待子進程結束,將增加父進程的負擔,影響服務器進程的并發性能.在Linux下可以簡單地將 SIGCHLD信號的操作設為SIG_IGN.

signal(SIGCHLD,SIG_IGN);

這樣,內核在子進程結束時不會產生僵尸進程.這一點與BSD4不同,BSD4下顯式等待子進程結束才能釋放僵尸進程.

4. 參考代碼

1.

#include <signal.h>

#include <stdlib.h>

#include <syslog.h>

#include <fcntl.h>

#include <stdio.h>

#include <sys/resource.h>

void daemonize(const char *cmd)

{

int i, fd0, fd1, fd2;
pid_t pid;

struct rlimit rl;

struct sigaction sa;

/*

* Clear file creation mask.

*/

umask(0);

/*

Get maximum number of file descriptors.

*/

if (getrlimit(RLIMIT_NOFILE, &rl) < 0)

printf("%s: can't get file limit", cmd);

/*

* Become a session leader to lose controlling TTY.

*/

if ((pid = fork()) < 0)

printf("%s: can't fork", cmd);

else if (pid != 0) /* parent */

exit(0);

setsid();

/*

* Ensure future opens won't allocate controlling TTYs.

*/

sa.sa_handler = SIG_IGN;

sigemptyset(&sa.sa_mask);

sa.sa_flags = 0;

if (sigaction(SIGHUP, &sa, NULL) < 0)

printf("can't ignore SIGHUP");

if ((pid = fork()) < 0)

printf("%s: can't fork", cmd);

else if (pid != 0) /* parent */

exit(0);

/*

* Change the current working directory to the root so

* we won't prevent file systems from being unmounted.

*/

if (chdir("/") < 0)

printf("can't change directory to /");

/*

* Close all open file descriptors.

*/

if (rl.rlim_max == RLIM_INFINITY)

rl.rlim_max = 1024;

for (i = 0; i < rl.rlim_max; i )

close(i);

/*

* Attach file descriptors 0, 1, and 2 to /dev/null.

*/

fd0 = open("/dev/null", O_RDWR);

fd1 = dup(0);

fd2 = dup(0);

/*

* Initialize the log file.

*/

openlog(cmd, LOG_CONS, LOG_DAEMON);

if (fd0 != 0 || fd1 != 1 || fd2 != 2) {

syslog(LOG_ERR, "unexpected file descriptors %d %d %d",fd0, fd1, fd2);

exit(1);

}

syslog(LOG_DEBUG, "daem ok ");

}

int main()

{

daemonize("test");

while(1);//守護進程所要干的事情

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲成人免费aa| 国产一区二中文字幕在线看| 成人午夜在线观看| 精品视频久久久久久久| 亚洲精品久久久一区二区三区| 亚洲成人网av| 51久久精品夜色国产麻豆| 久久久久久久久久久亚洲| 国产视频久久久| 亚洲女人天堂视频| 久99久在线视频| 97视频在线观看免费| 91亚洲国产精品| 精品一区二区亚洲| 在线播放日韩av| 国产精品女主播| 91精品国产一区| 精品一区电影国产| 亚洲国产97在线精品一区| 国产精品一区二区性色av| 国产精品色婷婷视频| 国产欧美日韩亚洲精品| 中文字幕日韩欧美在线| 亚洲国产成人久久综合一区| xvideos国产精品| 中文字幕在线国产精品| 国产精品久久久久久久av大片| 欧美成人一区二区三区电影| 亚洲激情视频在线播放| 色综合久久精品亚洲国产| 亚洲老头老太hd| 九九热在线精品视频| 国模精品系列视频| 亚洲午夜精品久久久久久性色| 欧美性猛交xxxx免费看| 姬川优奈aav一区二区| 日韩欧美a级成人黄色| 国产啪精品视频| 欧美成人精品不卡视频在线观看| 4388成人网| 久久精品电影网| 久久在线观看视频| 91社区国产高清| 深夜福利国产精品| 尤物tv国产一区| 亚洲iv一区二区三区| 热门国产精品亚洲第一区在线| 中文字幕久精品免费视频| 亚洲精品第一国产综合精品| 国产黑人绿帽在线第一区| 欧美性猛交xxxx黑人猛交| 欧美极品美女电影一区| 激情久久av一区av二区av三区| 国产色综合天天综合网| 九九热r在线视频精品| 久久人人爽人人爽人人片av高清| 久久99国产精品久久久久久久久| 日韩免费高清在线观看| 国产精品久久久久久久久久东京| 日本精品久久中文字幕佐佐木| 日韩精品在线观看一区二区| 97超碰国产精品女人人人爽| 亚洲国产成人在线播放| 韩国一区二区电影| 久久久久国产精品www| 欧美在线观看视频| 日韩中文在线中文网三级| 91高清视频在线免费观看| 亚洲天堂av高清| 欧美中文在线免费| 欧美在线观看网址综合| 成人性生交大片免费看小说| 亚洲欧美另类在线观看| 中文字幕一精品亚洲无线一区| 成人福利免费观看| 2019中文字幕全在线观看| 亚洲第一精品久久忘忧草社区| 久久亚洲精品一区| 视频在线一区二区| 亚洲成人精品在线| 搡老女人一区二区三区视频tv| 91精品国产综合久久久久久久久| 日韩精品欧美激情| 欧美日韩国产va另类| 精品久久久久久国产| 中文字幕欧美日韩在线| 国产人妖伪娘一区91| 欧美伊久线香蕉线新在线| 欧美午夜精品久久久久久人妖| 欧洲永久精品大片ww免费漫画| 91在线无精精品一区二区| 欧美大片在线看| 日韩av免费一区| 欧美日韩国产成人在线观看| 欧美激情伊人电影| 欧美黄色成人网| 国产日产欧美精品| 国产suv精品一区二区三区88区| 91精品视频专区| 亚洲成色777777女色窝| 在线丨暗呦小u女国产精品| 国产在线播放不卡| 中文字幕在线成人| 亚洲精品自拍第一页| 日韩精品视频免费专区在线播放| 国内久久久精品| 午夜精品久久久久久久久久久久久| 亚洲激情电影中文字幕| 久久精品青青大伊人av| 欧美天天综合色影久久精品| 欧美xxxwww| 国产主播喷水一区二区| 亚洲精品视频二区| 日韩免费观看在线观看| 久久99视频免费| 粉嫩av一区二区三区免费野| 欧美中文字幕在线播放| 国产精品久久婷婷六月丁香| 91久久久久久久久久久| 亚洲人av在线影院| 97在线视频免费播放| 尤物tv国产一区| 日韩精品视频中文在线观看| 粉嫩老牛aⅴ一区二区三区| 欧美日韩第一视频| 亚洲欧美日韩视频一区| 成人久久久久久| 亚洲激情免费观看| 亚洲精品美女在线观看| 欧美夜福利tv在线| 精品在线欧美视频| 亚洲精品福利免费在线观看| 伦伦影院午夜日韩欧美限制| 久久91精品国产91久久久| 欧美日本在线视频中文字字幕| 亚洲精品久久久久久下一站| 97色在线视频观看| 精品国产一区二区三区久久久狼| 精品久久久久久久久国产字幕| 国产日韩视频在线观看| 亚洲欧美色图片| 久久伊人精品视频| 欧美视频在线观看 亚洲欧| 久久久噜噜噜久久久| 91精品国产综合久久男男| 色偷偷偷亚洲综合网另类| 色www亚洲国产张柏芝| 91夜夜未满十八勿入爽爽影院| 日产精品久久久一区二区福利| 日韩精品视频在线免费观看| 亚洲亚裔videos黑人hd| 91视频九色网站| 久久久久久久999精品视频| 91久久夜色精品国产网站| 久久精品成人一区二区三区| 尤物精品国产第一福利三区| 国外日韩电影在线观看| 久久69精品久久久久久久电影好| 精品国产31久久久久久| 精品国产一区二区三区四区在线观看| 亚洲激情视频在线播放| 国产+人+亚洲| 日韩精品中文字幕有码专区| 九九久久国产精品|