守護程序 學習demo

2021-10-03 02:59:37 字數 1778 閱讀 6948

守護程序demo如下

#include

#include

#include

#include

#include

#include

#include

#include

#define length 128

char pid_name=

"test"

;static

void

start_daemon

(const

char

*daemonname)

;char pid_file[len]=;

if(!daemonname)

exit(1

);fprintf

(stdout

,"starting %s...\n"

,daemonname)

;snprintf

(pid_file,lentgh,

"/var/run/%s.pid"

,daemonname)

;// 一、呼叫fork,終止父程序,留下子程序

// 1. 子程序繼承了父程序的程序組id

// 2. 子程序不是程序組的頭程序,可以呼叫setsid

pid =

fork()

;if(pid <0)

else

if(pid)

// 二、呼叫setsid

// 1.建立乙個新的會話,《一》中的子程序1變為新會話的會話頭程序

// 2.以及新程序組的程序組頭程序,程序與控制終端脫離

setsid()

;// 三、禁止程序重新開啟控制終端

pid =

fork()

;if(pid <0)

else

if(pid)

// 四、為錯誤處理函式設定標識

// 五、改變工作目錄到根目錄,若不更改目錄,可能無法解除安裝所在的檔案系統if(

chdir

("/"

)<0)

// 六、關閉所有開啟的描述符

// 1. 關閉繼承過來的所有開啟著的檔案描述符

for(i =

3; i <

1024

; i++

)// 七、將stdin、stdout和stderr重定向到/dev/null

// 1. 開啟/dev/null作文本守護程序的標準輸入、輸出、和錯誤輸出

// 2. 確保這些描述符[0,1,2]開啟,防止被其他套接字占用

nullfd =

open

("/dev/null"

,o_rdwr);if

(nullfd !=-1

)else

fd =

open

(pid_file,o_wronly|o_creat,

0644);

if(fd <0)

if(lockf

(fd,f_tlock,0)

<0)

if(ftruncate

(fd,0)

<0)

//sprintf(buf,"%d\n",(int)getpid());

//printf("pid = %s\n",buf);if(

write

(fd,buf,

strlen

(buf)

)<

strlen

(buf))}

intmain()

守護程序學習

守護程序學習 一 什麼是守護程序 守護程序,也就是通常說的daemon 精靈 程序,是linux中的一種服務程序。它的特點是 不占用控制終端 後台執行 獨立於控制終端 週期性執行 1.1後台執行 守護程序需要獨立於任何乙個控制終端。實現方法呼叫是通過建立子程序來充當守護程序,而父程序退出,這樣子程序...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char argv else if argc...

守護程序及守護程序輸出

1 建立乙個輸出程式 2 建立乙個守護程序 1 建立乙個輸出程式 守護程序不與終端聯絡,所以,需要另外建立乙個程式用於輸出。也可以直接使用 bin echo example daemon help.cc include int main int argc,char ar else if argc 2...