欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Linux培訓(xùn)之解析Linux后臺(tái)進(jìn)程與守護(hù)進(jìn)程的區(qū)別

2018-02-05 11:43:07 1376瀏覽

今天扣丁學(xué)堂給大家總結(jié)了一下Linux視頻教程之解析Linux守護(hù)進(jìn)程的介紹,首先說(shuō)一下后臺(tái)進(jìn)程與守護(hù)進(jìn)程的區(qū)別吧。



一、后臺(tái)進(jìn)程與守護(hù)進(jìn)程

1、守護(hù)進(jìn)程已經(jīng)完全脫離終端控制臺(tái)了,而后臺(tái)程序并未完全脫離終端(在終端未關(guān)閉前還是會(huì)往終端輸出結(jié)果);

2、守護(hù)進(jìn)程在關(guān)閉終端控制臺(tái)時(shí)不會(huì)受影響,而后臺(tái)程序會(huì)隨用戶退出而停止,需要在以nohupcommand&格式運(yùn)行才能避免影響;

3、守護(hù)進(jìn)程的會(huì)話組和當(dāng)前目錄,文件描述符都是獨(dú)立的。后臺(tái)運(yùn)行只是終端進(jìn)行了一次fork,讓程序在后臺(tái)執(zhí)行,這些都沒(méi)改變;

二、守護(hù)進(jìn)程的特點(diǎn)

守護(hù)進(jìn)程(Daemon)是在后臺(tái)運(yùn)行的一種特殊進(jìn)程,它脫離于終端,從而這可避免進(jìn)程被任何終端所產(chǎn)生的信號(hào)打斷,它在執(zhí)行進(jìn)程中的產(chǎn)生信息也不在任何終端上顯示。守護(hù)進(jìn)程周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件,Linux的大多數(shù)服務(wù)器就是用守護(hù)進(jìn)程實(shí)現(xiàn)的。

三、守護(hù)進(jìn)程編程要點(diǎn)

1、屏蔽一些有關(guān)控制終端操作的信號(hào),是為了防止在守護(hù)進(jìn)程沒(méi)有正常啟動(dòng)起來(lái)前,控制終端受到干擾退出或掛起。代碼如下:

/*處理可能的終端信號(hào)*/

signal(SIGTTOU,SIG_IGN);

signal(SIGTTIN,SIG_IGN);

signal(SIGTSTP,SIG_IGN);

signal(SIGHUP,SIG_IGN);

2、在后臺(tái)運(yùn)行

/*是父進(jìn)程,結(jié)束父進(jìn)程,子進(jìn)程繼續(xù)*/

if(fork())

exit(0);

3、脫離控制終端和進(jìn)程組:

(1)一個(gè)進(jìn)程屬于一個(gè)進(jìn)程組,進(jìn)程組號(hào)(PGID)就是進(jìn)程組長(zhǎng)的進(jìn)程號(hào)(PID)

(2)同進(jìn)程組中的進(jìn)程共享一個(gè)控制終端,這個(gè)控制終端默認(rèn)是創(chuàng)建進(jìn)程的終端

(3)一個(gè)進(jìn)程關(guān)聯(lián)的控制終端和進(jìn)程組通常是從父進(jìn)程繼承下來(lái)的,因此,這個(gè)子進(jìn)程仍然受到父親進(jìn)程終端的影響,因?yàn)榻K端產(chǎn)生的信號(hào)會(huì)發(fā)送給前臺(tái)進(jìn)程組的所有進(jìn)程。

基于以上原因,需要讓為個(gè)子進(jìn)程徹底擺脫該終端的影響,需要調(diào)用setsid()使子進(jìn)程成為新的會(huì)話組長(zhǎng),代碼如下:

setsid();

setsid()調(diào)用成功后,調(diào)用此函數(shù)的進(jìn)程成為新的會(huì)話組長(zhǎng)和新的進(jìn)程組長(zhǎng),并與原來(lái)的進(jìn)程組脫離關(guān)系。由于會(huì)話過(guò)程對(duì)控制終端的獨(dú)占性,進(jìn)程同時(shí)與控制終端脫離。

4、禁止進(jìn)程重新打開(kāi)控制終端,采用的辦法是再次創(chuàng)建一個(gè)子進(jìn)程,并讓父親進(jìn)程退出,該子進(jìn)程不再是會(huì)話組長(zhǎng),從而達(dá)到目的。代碼如下:

/*結(jié)束第一子進(jìn)程,第二子進(jìn)程繼續(xù)*/

if(fork())

exit(0);

5、關(guān)閉打開(kāi)的文件描述符。因?yàn)檫M(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了打開(kāi)的文件描述符,一般情況下不再需要。如不關(guān)閉,將會(huì)浪費(fèi)系統(tǒng)資源。代碼如下:

#defineNOFILE256

for(i=0;i

close(i);

6、改變當(dāng)前工作目錄。進(jìn)程活動(dòng)時(shí),其工作目錄所在的文件系統(tǒng)不能卸載。因此需要將守護(hù)進(jìn)程的工作目錄改變到合適的目錄。代碼如下:

chdir("/tmp");

7、重設(shè)文件創(chuàng)建掩碼。進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了文件創(chuàng)建掩碼。它可能修改守護(hù)進(jìn)程所創(chuàng)建的文件的存取權(quán)限。代碼如下:

umask(0);

8、處理SIGCHLD信號(hào)(子進(jìn)程退出信號(hào))。如果不等待子進(jìn)程結(jié)束,子進(jìn)程將成為僵尸進(jìn)程從而占用系統(tǒng)內(nèi)核資源。

/*將子進(jìn)程退出信號(hào)設(shè)為SIG_IGN,讓系統(tǒng)幫助回收進(jìn)程資源*/

signal(SIGCHLD,SIG_IGN);

整體代碼如下:

#defineNOFILE256

voidDaemonMode()

{

intnum=0;

intfd0,fd1,fd2;

/*屏蔽可能的信號(hào)*/

signal(SIGTTOU,SIG_IGN);

signal(SIGTTIN,SIG_IGN);

signal(SIGTSTP,SIG_IGN);

signal(SIGHUP,SIG_IGN);

if(fork())

exit(0);

setsid();

if(fork())

exit(0);

chdir("/tmp/httpd");

umask(0);

for(;num

close(num);

/*將輸入、輸出重定向。因?yàn)橹懊枋龇缄P(guān)閉了,所以新打開(kāi)值為0、1、2*/

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

fd1=dup(0);

fd2=dup(0);

signal(SIGCHLD,SIG_IGN);

}

補(bǔ)充setsid()函數(shù)功能:

如果調(diào)用進(jìn)程已經(jīng)是一個(gè)進(jìn)程組的組長(zhǎng),則此函數(shù)返回錯(cuò)誤。為了杜絕這種情況,通常先調(diào)用fork()創(chuàng)建子進(jìn)程,然后使其父進(jìn)程終止,而子進(jìn)程繼續(xù),在子進(jìn)程中調(diào)用此函數(shù)。如果調(diào)用此函數(shù)的進(jìn)程不是一個(gè)進(jìn)程組組長(zhǎng),則此函數(shù)會(huì)創(chuàng)建一個(gè)新會(huì)話,調(diào)用setsid()函數(shù)的進(jìn)程成為新的會(huì)話的領(lǐng)頭進(jìn)程,

并與其父進(jìn)程的會(huì)話組和進(jìn)程組脫離。由于會(huì)話對(duì)控制終端的獨(dú)占性,進(jìn)程同時(shí)與控制終端脫離。

最后想要了解更多關(guān)于Linux發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux培訓(xùn)視頻教程系統(tǒng),通過(guò)千鋒扣丁學(xué)堂金牌講師在線錄制的第一套自適應(yīng)Linux在線視頻課程系統(tǒng),讓你快速掌握Linux從入門到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477。


扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多的學(xué)習(xí)資料



查看更多關(guān)于“Linux培訓(xùn)資訊的相關(guān)文章>>

標(biāo)簽: Linux命令 Linux視頻教程 Linux培訓(xùn) Linux在線學(xué)習(xí) Linux在線視頻 Linux進(jìn)程

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部