什麼是linux守護行程

2022-02-25 16:00:13

在linux中,守護行程也稱「精靈程序」,是一個在後臺執行且不受任何終端控制的特殊程序,用於執行特定的系統任務。守護行程獨立於控制終端並且週期性的執行某種發生的事件。

本教學操作環境:linux5.9.8系統、Dell G3電腦。

守護行程的定義

守護行程也稱為精靈程序(Daemon),是一個在後臺執行且不受任何終端控制的特殊程序,用於執行特定的系統任務。很多守護行程在系統引導的時候啟動,並且一直執行直到系統關閉。另一些只在需要的時候才啟動,完成任務後就自動結束。

它獨立於控制終端並且週期性的執行某種發生的事件。守護行程是一種很有用的程序。Linux的大多數伺服器就是用守護行程實現的。

Linux系統啟動時會啟動很多系統服務程序,這些系統服務程序沒有控制終端,不能直接和使用者互動。其他程序都是在使用者登入或執行程式時建立,在執行結束或使用者登出時終止,但系統服務程序(守護行程)不受使用者登入登出的影響,它們一直在執行著。這種程序有一個名稱叫守護行程(Daemon)。

下面們用ps axj命令檢視系統中的程序。引數a 表示不僅列出當前使用者的程序,也列出所有其他使用者的程序; 引數x 表示不僅列出有控制終端的程序,也列出所有無控制終端的程序;引數j 表示列出與作業控制相關的資訊。

1.png

(1)凡是TPGID一欄寫著-1的都是沒有控制終端的程序,也就是守護行程;

(2)在COMMAND一列用[ ]括起來的名字表示核心執行緒,這些執行緒在核心裡建立,沒有使用者空間程式碼,因此沒有程式檔名和命令列,通常採用以k開頭的名字,表示Kernel;

(3)init程序我們已經很熟悉了,udevd負責維護/dev目錄下的裝置檔案,acpid負責電源管理,syslogd負責維護/var/log下的紀錄檔檔案;

(4)可以看出,守護行程通常採用以d結尾的名字,表示Daemon。

守護行程的特點

(1)在Linux中,每個系統與使用者進行交流的介面成為終端,每一個從此終端開始執行的程序都會依附於這個終端,這個終端被稱為這些程序的控制終端;

(2)當控制終端被關閉的時候,相應的程序都會自動關閉。但是守護行程卻能突破這種限制,它脫離於終端並且在後臺執行,(脫離終端的目的是為了避免程序在執行的過程中的資訊在任何終端中顯示並且程序也不會被任何終端所產生的終端資訊所打斷),它從被執行的時候開始運轉,直到整個系統關閉才退出(當然可以認為是殺死相應的守護行程);

(3)如果想讓某個程序不因為使用者或中斷或其他變化而影響,那麼就必須把這個程序變成一個守護行程。

程序,行程群組,對談,控制終端之間的關係

因為守護行程的建立需要改變這些環境引數,所以瞭解它們之間的關係很重要:

2.png

  • 行程群組:它是由一個或多個行程群組成,行程群組號(GID)就是這些程序中的行程群組長的PID。

  • 對談:其實叫做對談期(session),它包括了期間所有的行程群組,一般一個對談期開始於使用者login,一般login的是shell終端,所以shell終端又是此次對談期的首程序,對談一般結束於logout。對於非行程群組長,它可以呼叫setsid()建立一個新的對談。

  • 控制終端(tty):一般就是指shell終端,它在對談期中可有也可以沒有。

建立守護行程

建立守護行程最關鍵的一步是呼叫setsid函數建立一個新的Session Leader。

#includepid_t setid(void);//該函數呼叫成功時返回新建立的Session的id(其實也就是當前程序的id),出錯返回-1。

注意,呼叫這個函數之前,當前程序不允許是行程群組的Leader,否則該函數返回-1。要保證當前程序不是行程群組的Leader也很容易,只要先fork再呼叫setsid就行了。fork建立的子程序和父程序在同一個行程群組中,行程群組的Leader必然是該組的第一個程序,所以子程序不可能是該組的第一個程序,在子程序中呼叫setsid就不會有問題了。

成功呼叫該函數的結果是:

(1)建立一個新的Session,當前程序為Session Leader,當前程序的id就是Session的id;

(2)建立一個新的行程群組,當前程序為行程群組的Leader,當前程序的id就是行程群組的id;

(3)如果當前程序原本有一個控制終端,則它失去這個終端,成為一個沒有控制終端的程序。(所謂失去控制終端指的是,原來的控制終端仍然是開啟的,仍然可以讀寫,但只是一個普通的開啟檔案,而不是控制終端了)。

如何殺死守護行程

1.首先ps axj | grep 守護行程名字,找到相應的守護行程,然後使用kill -9 守護行程名殺掉;

2.利用ps -ef命令查詢相應的守護行程,再用kill -9命令將其殺死;

3.建立shell指令碼對程序的啟動、關閉、重新啟動進行自動管理。

相關推薦:《Linux視訊教學

以上就是什麼是linux守護行程的詳細內容,更多請關注TW511.COM其它相關文章!