程序通訊基礎04 建立Linux守護程序

2021-10-05 10:18:39 字數 1472 閱讀 7448

守護程序是生存期長的一種程序。它們常常在系統引導裝入時啟動,僅在系統關閉時才終止。

守護程序沒有控制終端。因此,說他們是在後台執行的。unix系統有很多守護程序,他們執行日常事務活動。

首先要呼叫umask將檔案模式建立遮蔽字設定為乙個已知值(通常是0),有繼承得來的檔案模式建立遮蔽字可能會被設定為拒絕某些許可權。如果守護程序要建立檔案,那麼他可能要設定特定的許可權。

呼叫fork,然後使父程序exit。這樣做實現了

1.如果守護程序是作為一條簡單的shell命令啟動的,那麼父程序終止會讓shell認為這條命令已經執行完畢。

2.雖然子程序繼承了父程序的程序組id,但獲得了乙個新的程序id,那麼就保證了子程序不是乙個程序組的組長程序。、

3.呼叫setsid建立乙個新回話。我們知道如果呼叫setsid函式的程序不是乙個程序組的組長,則此函式建立乙個新回話。並且:

1)該程序變成新會話的會話首程序,此時,該程序是新會話中的唯一程序

2)該程序成為乙個新程序組的組長程序。新程序組id是該呼叫程序的程序id

3)該程序沒有控制終端,即使呼叫函式之前該程序有乙個控制終端,現在這種關係也被切斷。

4.將當前工作目錄改為根目錄。

5.關閉不再需要的檔案描述符。這是守護程序不再持有從其父程序繼承來的任何檔案描述符。

#include

#include

#include

#include

#include

#include

intmain()

// 設定為新組

pid =

setsid()

;if(pid ==-1

) std::cerr <<

"setsid error"

;// 更新工作空間,一般是乙個不可解除安裝的硬碟位址

ret =

chdir

("/home/andy/code/run");

if(ret ==-1

) std::cerr <<

"chdir error"

;// 檔案許可權

umask

(0022);

// 重定向流,不產生流,避免流溢位

close

(stdin_fileno)

; fd =

open

("/dev/null"

, o_rdwr);if

(fd ==-1

) std::cerr <<

"open error"

;dup2

(fd, stdout_fileno)

;dup2

(fd, stderr_fileno)

;// 具體業務,可以使心跳檢測或者其他什麼的

while

(true

)return0;

}

Linux基礎 建立新程序

好久沒學習了,最近都在忙著上班的事情,過年後這段時間感覺每天都有事情做,忙忙忙,學linux感覺說實話,有點枯燥,比當初學fpga還要枯燥。真的是畢業之後,再去學習的動力就下降很多嗎。但是還是要堅持啊。程式並不能單獨執行,只有將程式載入到記憶體中,系統為他分配資源後才能夠執行,這種執行著的程式稱之為...

Linux程序通訊

linux程序通訊 無名管道主要用於有親緣關係的程序通訊,其位於外存區域,但在檔案系統中不可見。在實際應用中,程序通訊往往發生在無關程序之間,此種情形下,若仍想使用管道,則必須使用有名管道,也稱命名管道或fifo檔案。這種型別的管道在檔案系統中可見,建立時需要指定具體路徑和檔名,管道建立之後,可用l...

Linux 程序通訊

程序通訊 通訊 communication 意味著在程序間傳送資料。也把程序間控制資訊的交換稱為低階通訊,而把程序間大批量資料的交換稱為高階通訊。程序通訊的型別 1 共享儲存器系統 記憶體 共享儲存器系統為了傳送大量資料,在儲存器中劃出一塊共享儲存區,諸程序可通過對共享儲存區進行讀資料或寫資料以實現...