1.什麼是守護進程?
守護進程也稱精靈進程(Daemon),是運⾏行在後臺的⼀一種特殊進程。它獨⽴立於控制終端並
且週期性地執⾏行某種任務或等待處理某些發⽣生的事件。守護進程是⼀一種很有⽤用的進程。
Linux的⼤大多數服務器就是⽤用守護進程實現的。⽐比如,Internet服務器inetd,Web服務器httpd
等。同時,守護進程完成許多系統任務。⽐比如,作業規劃進程crond等。
2.創建守護進程的6步驟(作用):
1. 調⽤用umask將⽂文件模式創建屏蔽字設置爲0.
2. 調⽤用fork,⽗父進程退出(exit)。原因:1)如果該守護進程是作爲⼀一條簡單的shell命令
啓動的,那麼⽗父進程終⽌止使得shell認爲該命令已經執⾏行完畢。2)保證⼦子進程不是⼀一個
進程組的組長進程。
3. 調⽤用setsid創建⼀一個新會話。setsid會導致:1)調⽤用進程成爲新會話的⾸首進程。 2)調⽤用
進程成爲⼀一個進程組的組長進程 。3)調⽤用進程沒有控制終端。
4. 將當前⼯工作⽬目錄更改爲根⽬目錄。
5. 關閉不在需要的⽂文件描述符。
6. 其他:忽略SIGCHLD信號。
其中必不可少的有三個步驟,即2 3 4。
代碼如下:
#include
#include
#include
#include
void my_daemon()
{
umask(0); //第一步:將文件模式創建屏蔽字設置爲0
pid_t id = fork(); //第二步:創建一個新的進程
if(id > 0){//father // 父進程退出
exit(0);
}
setsid(); //第三步:調用setsid
chdir("/"); //第四步:將當前工作目錄改爲根目錄
close(0); //第五步:關閉不需要的文件描述符
close(1);
close(2);
signal(SIGCHLD, SIG_IGN);//第六步:忽略其他信號
}
int main()
{
my_daemon();
while(1);
return 0;
}