基於Socket的監護程序進製

2021-08-27 20:26:52 字數 1581 閱讀 7658

在監護程序中,建立乙個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 用返回...