守護程序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...