什麼是守護程序
守護程序也稱精靈程序(daemon),是運⾏在後台的⼀種特殊程序。它獨⽴於控制終端並且周期性地執⾏某種任務或等待處理某些發⽣的事件。守護程序是⼀種很有⽤的程序。 linux的⼤多數伺服器就是⽤守護程序實現的。⽐如, ftp伺服器, ssh伺服器, web伺服器httpd等。同時,守護程序完成許多系統任務。⽐如,作業規劃程序crond等。
linux系統啟動時會啟動很多系統服務程序,這些系統服務程序沒有控制終端,不能直接和⽤戶互動。其它程序都是在⽤戶登入或運⾏程式時建立,在運⾏結束或⽤戶登出時終⽌,但系統服務程序(守護程序)不受⽤戶登入登出的影響,它們⼀直在運⾏著。這種程序有⼀個名稱叫守護程序(daemon)。
守護程序有如下幾個特點:
守護程序的「進化史」
在這裡插入描述
**實現
//守護程序進化史:
//1.建立乙個孤兒程序
//2.在孤兒程序內建立乙個新會話
//3.修改預設工作路徑為"/"
//4.重定向檔案描述符到"/dev/null"
//5.設定檔案的預設許可權掩碼
//6.確保自身不是會話首程序,從而不和任何終端建立聯絡
//7,成功逆襲成為守護程序
#include#include#include#include#include#include #include void mydaemon()
else if (pid > 0)
//建立孤兒程序完成
int sid = setsid();
if (sid < 0)
//建立會話完成
chdir("/");//修改預設工作路徑
int fd = open("/dev/null",o_rdwr);
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);//檔案描述符重定向
umask(0);//修改預設許可權
pid = fork();
if (pid < 0)
else if (pid > 0)
//建立孫子程序,孫子程序不是該會話的首程序(受程序是剛才退出的孤兒程序,)。
//這樣做能保證該程序不和任何終端建立聯絡。
}//建立成功
int main()
return 0;
}
⽤ps axj命令檢視系統中的程序。引數a表⽰不僅列當前⽤戶的程序,也列出所有其他⽤ 戶的程序,參
數x表⽰不僅列有控制終端的程序,也列出所有⽆控制終端的程序,引數j表⽰列出與 作業控制相關的資訊。
測試結果:
其中ppid等於1說明他是乙個孤兒程序,tty 等於 ?說明不與任何任何終端有聯絡。
當然建立守護程序也可以呼叫deamon函式:
#include int daemon(int nochdir, int noclose);
引數: nochdir: 為0則修改預設工作路徑
noclose:為0則重定向檔案描述符
Linux守護程序
linux下守護程序一般分為5步,但是實際上只有前兩步是關鍵。第一步 建立子程序,關閉父程序。使用fork 建立,父程序exit 退出。關鍵第二步 建立新的會話id,setsid 作用是使子程序擺脫原有的會話 程序組 終端的控制,其實,linux下每個程序都是由一號程序建立而來的,每個程序都是1號程...
Linux 守護程序
守護程序daemon,是生存期較長的一種程序,名字一般以字母d結尾。它們常常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...
Linux守護程序
程式設計級別 一 守護程序的概念 守護程序是一種生存期比較長的程序,常常在系統自舉時啟動,在系統關閉時退出。因為他們沒有控制終端,因此是在後台執行的。二 守護程序的程式設計規則 1清除檔案模式建立遮蔽字 2成為乙個新的會話首程序 3略hup訊號。然後再次fork 4改變當前工作路徑 5關閉所有的檔案...