我們經常需要實現程序監控,如果某一程序異常退出或是跑飛則立即重啟。通常使用的有2種方法:
一.supervisor來管理程序。
二.自己寫程式來監管。
對於1而言,有些檔案系統中不支援,需要移植安裝。
對於2而言,不少都是單獨寫個監管程式,通過寫入檔案pid定時檢查程序pid是否存在,或是檢視是否有此程序名存在。個人覺得不太實用,遇到除錯時或是其他操作時,靈活性太差。
本案是模仿supervisor,使用註冊監控程式,來實現管控。功能予以實現如下:
1,每個程序往往有如下三個狀態。
typedef enum _cmdtype
cmdtype_t;
2.程序管控結構體
typedef struct msgstructmsgstruct;
3.所程序帶引數
typedef struct argstr_targstr;
本案所使用的是訊息佇列進行通訊,大家可以根據自己的需求進行更改。
異常處理:
如果程式註冊監管時發現之前的pid或程序路徑存在,kill掉之前的程序。
2.如果程式異常退出則根據路徑,和引數重啟程序。
3.如果程式取消,或是人為退出或暫停,則不重啟該程序。
**鏈結如下
Linuxc 建立與監控多個子程序
include include include include include 子程序個數 define sub pro count 10 處理子程序的退出訊號 void sub quit signal handle int sig 父程序的事件迴圈 void parentcycle 子程序的事件迴...
Linux C程序 執行緒
1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...
linux c 程序學習
1.fork 由於fork後的父程序與子程序的優先順序是一樣的,所以會存在父程序已經退出了而子程序還在執行,這時候的子程序就是孤兒程序,會被init程序收養,所以這時候getppid得到的1。int main exit 0 2.vfork 由vfork也是用來建立程序,但是子程序是共享父程序的位址空...