在監護程序中,建立乙個socket,負責監聽來自客戶端的資訊;
int init_socket(void )
backlog = 5 ;
if( -1 == listen( ser_sockfd, backlog ))
printf("server::server is waitting on socket=%d \n",ser_sockfd);
return ser_sockfd;
}
在被監護的程序中,建立乙個client執行緒,負責向監護程序的socket傳送資訊;
int client_main(void)
//set server sockaddr_un
srv_addr.sun_family = af_unix;
strcpy(srv_addr.sun_path, unix_domain);
//connect to server
ret = connect(client.sock_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
if(ret == -1)
client.connect_status = 1;
//receive message from server
memset(rcv_buf, 0, 132);
memset(send_buf, 0, 132);
memset(mac_addr, 0, 32);
//send message to server
getnetifethaddr(mac_addr);
sprintf(send_buf,"send to server:mac:%s\r\n",mac_addr);
write(client.sock_fd,send_buf,strlen(send_buf));
sleep(1);
write_msg(tell_server_start_voip);
return 0;
}
監護程序迴圈處理客戶端發來的訊息(select函式),最長等待時間為6秒,如果6秒仍沒有訊息,則記錄一次超時,然後進入下一次迴圈。當超時達到一定時長,則認為被監護程序已經死掉了,或者進入了死迴圈(輪不到client執行緒跑),此時,根據/var/run中的pid檔案,去/proc/中檢查是否還有該程序來判斷程序是死掉了,還是進入了死迴圈,進而重啟程序或者重啟系統。
監護程序除了防止被監護程序死迴圈,死掉之外,還有餵狗的操作。每次處理客戶端訊息之前,都會喂一次狗,這個操作是為了防止監護程序死掉,或者是核心崩潰,核心程序阻塞等,一旦發生上述任一情況,監護程序就不再餵狗,系統最終會被看門狗重啟。
綜上,系統整體的監護機制就是監護程序監護系統主程序,看門狗監護 監護程序和系統核心,藉此以保障系統的穩定。
監護程序資訊處理部分原始碼如下
while (1)
case 0:
}//process dead loop
else
}continue;
}default:
}}
基於嵌入式技術的監護系統設計方案
基於嵌入式技術的監護系統設計方案 可擴充套件,如gprs,即時通訊 1 引言 隨著我國經濟的快速發展 城市化程序的日益加速 人們生活節奏的不斷加快,越來越多的人們開始感到自己的健康每況愈下,很多人直至病情突發才明白。據報道,我國絕大多數人都處於亞健康狀態。隨著現代電子技術的發展,16 32位cpu的...
基於TCP的socket程式設計
sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於 tcp的 socket 程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個 ws2 32.lib 的庫檔案。伺服器端程式設...
基於TCP的socket程式設計
基於tcp的socket程式設計的伺服器程式流程如下 1 建立套接字 socket 2 將套接字繫結到乙個本地位址和埠上 bind 3 將套接字設為監聽模式,準備接收客戶請求 listen 4 等待客戶請求到來,當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5 用返回...