目標:fork的父程序作為守護程序監測子程序,如果子程序掛了,則可以實現子程序的重啟。
#include #include #include #include #include #include #include #include #include //共享記憶體一定要包含這個標頭檔案, 否則執行會出現段錯誤
#include /**
1 sighup 掛起
2 sigint 中斷
3 sigquit 退出
4 sigill 非法指令
5 sigtrap 斷點或陷阱指令
6 sigabrt abort發出的訊號
7 sigbus 非法記憶體訪問
8 sigfpe 浮點異常
9 sigkill kill訊號 不能被忽略、處理和阻塞
10 sigusr1 使用者訊號1
11 sigsegv 無效記憶體訪問
12 sigusr2 使用者訊號2
13 sigpipe 管道破損,沒有讀端的管道寫資料
14 sigalrm alarm發出的訊號
15 sigterm 終止訊號
16 sigstkflt 棧溢位
17 sigchld 子程序退出 預設忽略
18 sigcont 程序繼續
19 sigstop 程序停止 不能被忽略、處理和阻塞
20 sigtstp 程序停止
21 sigttin 程序停止,後台程序從終端讀資料時
22 sigttou 程序停止,後台程序想終端寫資料時
23 sigurg i/o有緊急資料到達當前程序 預設忽略
24 sigxcpu 程序的cpu時間片到期
25 sigxfsz 檔案大小的超出上限
26 sigvtalrm 虛擬時鐘超時
27 sigprof profile時鐘超時
28 sigwinch 視窗大小改變 預設忽略
29 sigio i/o相關
30 sigpwr 關機 預設忽略
31 sigsys 系統呼叫異常
**/void* child_thread(void* data)
return null;}
int main(void)
shmaddr = (int*)shmat(shmid, null, 0);
if(shmaddr == (void*)-1)
*shmaddr = cnt;
shmdt(shmaddr);
while(1)
else if (pid == 0)
printf("this is the child process: %d.\n", *shmaddr);
shmdt(shmaddr);
//prctl(pr_set_name, "child", null, null, null);
pthread_t id;
pthread_create(&id, null, &child_thread, null);
#if 0
int cnt = 0;
while(cnt < 5)
printf("child is over\n");
//return 0; //exit normal
//exit(0);
//exit(-1);
exit(3);
#else
printf("test segment fault\n");
int *p = null;
*p = 10;
while(1);
#endif
}else
else if(wifsignaled(status))
}else
shmaddr = (int*)shmat(shmid, null, 0);
if(shmaddr == (void*)-1)
*shmaddr = ++cnt;
shmdt(shmaddr);
} usleep(1000000);
} shmctl(shmid, ipc_rmid, null);
return 0;
}
實現守護程序
目錄守護程序 也稱為精靈程序,守護程序是乙個在後台執行並且不受任何終端控制的程序。unix作業系統有很多典型的守護程序 其數目根據需要或20 50不等 它們在後台執行,執行不同的管理任務。使用者使守護程序獨立於所有終端是因為,在守護程序從乙個終端啟動的情況下,這同乙個終端可能被其他的使用者使用。ps...
守護程序筆記
1 守護程序是脫離於 終端並且在 後台執行的程序。守護程序脫離於 終端是為了避免程序在執行過程中的資訊在任何終端上顯示並且程序也不會被任何終端所產生的終端資訊所打斷。2 由於在linux中,每乙個系統與使用者進行交流的介面稱為終端,每乙個從此終端開始執行的程序都會依附於這個終端,這個終端就稱為這些程...
守護程序學習
守護程序學習 一 什麼是守護程序 守護程序,也就是通常說的daemon 精靈 程序,是linux中的一種服務程序。它的特點是 不占用控制終端 後台執行 獨立於控制終端 週期性執行 1.1後台執行 守護程序需要獨立於任何乙個控制終端。實現方法呼叫是通過建立子程序來充當守護程序,而父程序退出,這樣子程序...