日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

[Linux]守护进程(精灵进程)

發(fā)布時間:2023/11/30 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Linux]守护进程(精灵进程) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、守護進程是什么

守護進程是生存期很長的一種進程,可以說它是7*24小時工作的。(什么是7*24,一周7天,每天24小時,這不就是一年365天一直在工作嘛,還搞的這么詼諧,哈哈)。它們常常在系統(tǒng)引導裝入時啟動,僅在系統(tǒng)關閉時才終止。因為它們沒有控制終端,所以說它們是在后臺運行的,而且它沒法直接和用戶交互。當然在后臺運行的可不一定是守護進程哦。Unix下有很多守護進程,執(zhí)行日常事務。守護進程是一種很有用的進程,Linux下的很多服務器大多是用守護進程實現(xiàn)的。比如Internet服務器inetd,Web服務器httpd等。

守護進程還有一個特點:其它進程都是在用戶登錄或運行程序時創(chuàng)建,在運行結束或用戶注銷時終止,但系統(tǒng)服務進程不受用戶登錄注銷的影響,它們一直在運行著。

我們用ps -axj來查看系統(tǒng)中的進程。-a顯示由其他用戶所擁有的進程的狀態(tài),-x顯示沒有控制終端的進程,-j顯示與作業(yè)有關的信息(進程組ID,會話ID,控制終端,終端進程組ID)。守護進程通常以d為結尾。

由上述的進程中,TPGID為-1的都是沒有控制終端的進程,也是守護進程。還有像COMMAND那一列中,用[]括起來的進程名,都表示內核線程。這些線程在內核里創(chuàng)建,沒有用戶空間代碼,因此沒有程序文件名和命令行,以k開頭,表示Kernel。它自成進程組,自成會話。

進程1通常是init,它是一個系統(tǒng)守護進程。

二、創(chuàng)建守護進程

我們寫一個mydaemon:

步驟哈:1.創(chuàng)建守護進程首先得,調用umask來將文件模式創(chuàng)建屏蔽字設置為0。

2.調用fork,使父進程退出。因為在這里,后面使用setid不允許進程為進程組id,因此得先將父進程exit。

3.調用setid創(chuàng)建一個新會話,成為會話首進程,成為進程組組長,沒有控制終端。這就是守護進程的特點吧。

4.將當前的工作目錄改為根目錄。你想想,如果你將守護進程的工作目錄設置為當前工作目錄而非根目錄,那么如果將這個目錄刪除后,就會導致嚴重的丟失問題。你的那個目錄將不能被刪除。

5.關閉不再需要的文件描述符。

守護進程實現(xiàn):

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<signal.h> void mydaemon() {umask(0);if(fork() <= 0)//child{}else//father{exit(0);}setsid();signal(SIGCHLD,SIG_IGN);close(0);close(1);close(2);chdir("/");}int main() {mydaemon(); // daemon(0,0);while(1);return 0; }

運行結果:

這樣一個守護進程就寫好啦。當然庫里邊也實現(xiàn)了一個守護進程,daemon函數(shù)。

int daemon(int nochdir, int noclose);

這里nochdir表示不改變當前守護進程的目錄,noclose表示不關閉進程文件描述符。

當前我們是把工作目錄修改了,所以:

當我們都設置為0時,daemon(0,0);說明修改; 當我們都設置為1時,daemon(1,1);說明不修改;

三、為什么創(chuàng)建守護進程時有人fork兩次?

第二次fork的作用:雖然當前關閉了和終端的聯(lián)系,但是后期可能會誤操作打開了終端。只有會話首進程能打開終端設備,也就是再fork一次,再把父進程退出,再次fork的子進程作為守護進程繼續(xù)運行,保證了該精靈進程不是會話的首進程,第二次不是必須的,是可選的,市面上有些開源項目也是fork一次。(再次fork一次,保證daemon進程,之后不會打開tty設備)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的[Linux]守护进程(精灵进程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。