詳解Linux中的守護程序

2022-10-07 13:15:06 字數 1788 閱讀 4206

一、什麼是守護程序

linux系統啟動時會啟動很多系統服務程序,這些系統服 務程序沒有控制終端,不能直接和使用者互動。其它程序都是在使用者登入或執行程式時建立,在運⾏結束或⽤戶登出時終止,但系統服務程序不受使用者登入登出的影響,它們⼀直在執行著。這種程序叫守護程序。

守護程序也被稱為精靈程序,是執行在後台的一種特殊程序,它獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。

檢視方式

ps axj命令:檢視系統中的程序。

引數a表示不僅列當前⽤戶的程序,也列出所有其他使用者的程序;

引數x表示不僅列有控制終端的程序,也列出所有⽆控制終端的程序;

引數j表示列出與作業控制相關的資訊;

二、守護程序的呼叫

建立守護程序最關鍵的⼀步是調⽤setsid函式建立⼀個新的會話,並成為會話leader。

該函式呼叫成功時返回新建立的session的id(其實也就是當前程序的id),出錯返回-1。注意,呼叫這個函式之前,程式設計客棧當前程序不允許是程序組的leader,否則該函式返回-1。要保證當前程序不是進 程組的leader也很容易,只要先fork再調⽤setsid就行了。fork建立的子程序和⽗程序在同⼀個程序組中,程序組的leader必然是該組的第⼀個程序,所以子程序不可能是該組的第⼀程序,在子程序中呼叫setsid就不會有問題了。

成功建立並呼叫乙個守護程序的標誌是:

1、成功新建乙個會話,當前程序成為該會話的leader,該會話的id為當前程序的id;

2、成功新建乙個新的程序組,並且成為該組的組長,該程序組的組id即為當前程序的id;

3、如果當前程序有乙個控制終端,那麼當前程序失去這個控程式設計客棧制終端,成為乙個無控制終端的程序;所謂失去控制終端是指,原來的控制終端仍然是開啟的,仍然可以讀寫,但只是⼀個普通的開啟⽂件⽽不是控制終端了。

三、守護程序的建立

1、使用umask將檔案模式建立遮蔽字設定為0;

2、呼叫fork(),父程序退出(exit)。 (如果該守護程序作為一條簡單的shell命令啟動的,那麼父程序終止使得shell認為該命令已經執行完畢。同時保證該程序不是乙個程序組的組長程序)

3、呼叫setsid建立乙個新會話。(setsid會使1、呼叫程序成為新會話的首程序;2、呼叫程序成為乙個程序組的組長程序;3、呼叫程序沒有控制終端)

4、將當前工作目錄更改為根目錄;

5、關閉不再ogusiarnao需要的檔案描述符;

6、忽略sigchld訊號;

**實現mydemon:

除了自己實現外,我們還可以呼叫系統中的demon進行設定;

進行第二次fork的原因?

要明晰第二次fork的原因,就必須明晰這兩次fork的作用。

第一次fork的作用是:1、讓shell認為這條命令已經終止,不用掛在終端輸入上;

2、為之後的setsid服務,因為呼叫setsid函式的程序不能是程序組組長,如果不fork出子程序,則此時的父程序是程序組組長,就無法呼叫setsid。(當子程序呼叫完setsid函式之後,子程序是會話組長也是程序組組長,並且脫離了控制終端,此時,不管控制終端如何操作,新的程序都不會收到一些訊號使得程序退出。)

(2)第二次fork的作用:

雖然當前關閉了和終端的聯絡,但是後期可能會誤操作開啟了終端。只有確定會話首程序能開啟終端裝置,也就是再fork一次,再把父程序退出,再次fork的子程序作為守護程序繼續執行,保證了該精靈程序不是對話期的首程序。

第二次不是必須的,是可選的,市面上有些開源專案也是fork一次

本文標題: 詳解linux中的守護程序

本文位址: /os/linux/194853.html

linux 守護程序詳解及建立守護程序

linux 守護程序詳解及建立守護程序 守護程序是一種後台執行並且獨立於所有終端控制之外的程序。守護程序的啟動 要啟動乙個守護程序,可以採取一下幾種方式 守護程序的建立 先來看乙個守護程序建立的例子 include include include include define maxfd 64 vo...

Linux守護程序

linux下守護程序一般分為5步,但是實際上只有前兩步是關鍵。第一步 建立子程序,關閉父程序。使用fork 建立,父程序exit 退出。關鍵第二步 建立新的會話id,setsid 作用是使子程序擺脫原有的會話 程序組 終端的控制,其實,linux下每個程序都是由一號程序建立而來的,每個程序都是1號程...

Linux 守護程序

守護程序daemon,是生存期較長的一種程序,名字一般以字母d結尾。它們常常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...