Linux學(xué)習(xí):什么是守護(hù)進(jìn)程?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.什么是守護(hù)進(jìn)程
守護(hù)進(jìn)程,也就是通常說的Daemon(精靈)進(jìn)程,
是Linux中的一種服務(wù)進(jìn)程。它的特點(diǎn)是:
不占用控制終端(后臺運(yùn)行)
獨(dú)立于控制終端
周期性運(yùn)行
例如:smbd
2.1 后臺運(yùn)行
守護(hù)進(jìn)程需要獨(dú)立于任何一個(gè)控制終端。實(shí)現(xiàn)方法調(diào)用是通
過創(chuàng)建子進(jìn)程來充當(dāng)守護(hù)進(jìn)程,而父進(jìn)程退出,這樣子進(jìn)程
就可以在后臺運(yùn)行。(范例展示)
pid=fork();
if(pid>0)
exit(0); //父進(jìn)程退出
else (pid==0)
{
//守護(hù)進(jìn)程
}
2.2 獨(dú)立于控制終端
守護(hù)進(jìn)程不能占用控制終端,因此需要在后臺運(yùn)行。實(shí)現(xiàn)方法是調(diào)用setsid()函數(shù)。
pid=fork();
if(pid>0)
exit(0); //父進(jìn)程退出
else (pid==0) //守護(hù)進(jìn)程
{
setsid();
。。。。。。
}
2.3.1 修改工作目錄
進(jìn)程活動時(shí),其工作目錄所在的文件系統(tǒng)不能卸載。例如:我們是從/mnt/usb目錄下啟動該守護(hù)進(jìn)程的,那么如果守護(hù)進(jìn)程的工作目錄就是/mnt/usb,我們就無法在守護(hù)進(jìn)程
還在運(yùn)行的情況下umount /mnt/usb。所以一般需要將守護(hù)的工作目錄切換到根目錄。
chdir("/");
2.3.2 修改文件權(quán)限掩碼
文件權(quán)限掩碼是指屏蔽掉文件權(quán)限中的對應(yīng)位。比如掩碼是00,它就屏蔽了文件創(chuàng)建者的可讀與可執(zhí)行權(quán)限。由于子進(jìn)程要繼承父進(jìn)程的文件權(quán)限掩碼,這勢必影響子進(jìn)程中新
創(chuàng)建的文件的訪問權(quán)限,為避免該影響,就需要重新對子進(jìn)程中的權(quán)限掩碼清零。通常的使用方法為函數(shù):
mask(0);
2.3.3 關(guān)閉打開文件
同文件權(quán)限碼一樣,子進(jìn)程還會從父進(jìn)程那里繼承一些已經(jīng)打開了的文件。這些被打開的文件可能永遠(yuǎn)不會被守護(hù)進(jìn)程讀寫,但它們一樣消耗系統(tǒng)資源,而且會導(dǎo)致文件所在的文
件系統(tǒng)無法卸載。因此在子進(jìn)程中需要將這些文件關(guān)閉。
for(i=0;i<MAXFILE;i++)
close(i);
#include