Linux並發回射伺服器 二 處理僵死程序

2021-07-29 06:29:19 字數 1153 閱讀 1966

執行三個客戶端程式然後非正常結束linux下我們用ps -a命令可以檢視當前程序的情況如下

解決方法是利用子程序傳遞給父程序的訊號

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define myport 9877 //伺服器端口

#define queue 20 //等待佇列大小

#define buffer_size 1024 //緩衝區大小

//訊號處理函式

void sigfunc(int signo)

int main()

//lisen,成功返回0,出錯返回-1

if(listen(server_sockfd,queue)==-1)

int count=0;

//訊號監聽

signal(sigchld,sigfunc);

while(1)

int pid;

//呼叫fork()函式時 如果是父程序呼叫則返回程序號,如果是子程序呼叫則返回0

//這裡父程序用來建立連線 子程序負責處理請求 所以當pid=0才執行

if((pid=fork())==0)

fputs(buffer,stdout);

//把相同的資料傳送給客戶端

send(conn,buffer,len,0);

}close(conn);

exit(0);

}close(conn);

count++;

}close(server_sockfd);

return

0;}

修改後伺服器端效果如下:

伺服器併發處理架構

網路伺服器如何處理併發請求的模型稱之為多工體系結構。1.inetd模式 在大部分unix作業系統中,預設的多工體系結構是inetd應用程式。通用的網路伺服器體系結構inetd分為兩個部分 主服務程序和客戶服務程序。主服務程序通常用於等待客戶端的連線請求。一旦客戶端發起乙個請求,主伺服器將建立連線,同...

伺服器設計 處理併發請求

伺服器設計技術有很多,按使用的協議來分有tcp伺服器和udp伺服器。按處理方式來分有迴圈伺服器和併發伺服器。在網路程式裡面,一般來說都是許多客戶對應乙個伺服器,為了處理客戶的請求,對服務端的程式就提出了特殊的要求。目前最常用的伺服器模型有 迴圈伺服器 伺服器在同一時刻只能響應乙個客戶端的請求 併發伺...

linux多程序併發伺服器

多程序併發伺服器,多執行緒版 include include include include include include include include include include include 程序 函式 void recyle int num int main int argc,cha...