Linux系統程式設計作業 守護程序

2021-10-19 08:19:02 字數 1954 閱讀 1712

知識點回顧

程序組和會話:

程序組:乙個程序組包含多個程序

會話:多個組組成乙個會話

注意點:

1、建立會話的程序不能是組長程序

2、一般建立會話是父程序先fork子程序,然後父程序退出,讓子程序呼叫setsid函式

3、建立乙個會話,這個子程序既是會長也是組長;

4、只要是建立了會話,這個程序就脫離了控制終端的影響

建立守護程序模型:

1、父程序fork子程序,然後父程序退出。目的是:子程序肯定不是組長程序,為後續呼叫setsid函式提供了條件。

2、子程序呼叫setsid函式建立乙個新的會話

a、該子程序成了該會話的會長

b、該子程序成了該組的組長程序

c、不再受控制終端影響了

3、改變當前的工作目錄,chdir-----非必要

4、重新設定檔案掩碼,umask(0000)

5、關閉stdin_filenostdout_filenostderr_fileno-------非必要

6、核心操作

作業描述:

**示例:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void

myfunc

(int signo)

//獲取當前的系統時間

time_t t;

time

(&t)

;char

*p =

ctime

(&t)

;//將時間寫入檔案

write

(fd,p,

strlen

(p))

;close

(fd)

;return;}

intmain()

//子程序呼叫setsid函式建立會話

setsid()

;//改變當前的工作目錄

chdir

("/day01");

//改變檔案掩碼

umask

(0000);

//關閉標準輸入,輸出和錯誤輸出的檔案描述符

close

(stdin_fileno)

;close

(stdout_fileno)

;close

(stderr_fileno)

;//核心操作

//註冊訊號處理函式

struct sigaction act;

act.sa_handler = myfunc;

act.sa_flags =0;

sigemptyset

(&act.sa_mask)

;sigaction

(sigalrm,

&act,

null);

//核心操作

//註冊訊號處理函式

struct itimerval tm;

tm.it_interval.tv_sec =2;

tm.it_interval.tv_usec =0;

tm.it_value.tv_sec =3;

tm.it_value.tv_usec =0;

setitimer

(itimer_real,

&tm,

null);

while(1

)return0;

}

linux中檢視乙個持續寫入的日誌檔案的方法:

tail -f mydemon.log

Linux系統程式設計之程序

程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...

linux系統程式設計 多程序

最近發現每天都在寫業務 好多基礎的東西都忘了,今天開始每天覆習一點基礎知識。今天先複習多程序 程序是具有一定功能的程式的一次執行活動,是系統資源分配和排程的基本單位 孤兒程序 父程序退出,子程序沒有退出,被init程序收養 init程序 是核心啟動後執行的第乙個程序,是所有孤兒程序的子程序。init...

《Linux系統程式設計 程序管理》

在linux的核心的五大組成模組中,程序管理模組時非常重要的一部分,它雖然不像記憶體管理 虛擬檔案系統等模組那樣複雜,也不像程序間通訊模組那樣條理化,但作為五大核心模組之一,程序管理對我們理解核心的運作 對於我們以後的程式設計非常重要。同時,作為五大組成模組中的核心模組,它與其他四個模組都有聯絡。下...