linux之守護進程的創建

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章