多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網(wǎng) > Socket編程實踐(8) --TCP服務(wù)器常見問題(3)

Socket編程實踐(8) --TCP服務(wù)器常見問題(3)

來源:程序員人生   發(fā)布時間:2014-12-19 08:38:08 閱讀次數(shù):2518次

服務(wù)端多進程避免僵尸進程的方法

1)通過疏忽SIGCHLD信號,解決僵尸進程

    在server端代碼中添加

signal(SIGCHLD, SIG_IGN);

2)通過wait/waitpid方法,解決僵尸進程

  signal(SIGCHLD,onSignalCatch);      void onSignalCatch(int signalNumber)   {    wait(NULL);   }

Server端部份代碼:

//return a socket that have start listened. int mkATCPServer(int serverPort, int backlog = SOMAXCONN) { int sockfd = socket(AF_INET,SOCK_STREAM,0); if (sockfd == ⑴) { err_exit("socket error"); } //add address reused int on = 1; if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)) == ⑴) { err_exit("setsockopt SO_REUSEADDR error"); } //band a local address and port struct sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(serverPort); serverAddr.sin_addr.s_addr = INADDR_ANY; //band an any IP address if (bind(sockfd,(struct sockaddr *)&serverAddr,sizeof(serverAddr)) == ⑴) { err_exit("bind error"); } //start to listen. if (listen(sockfd,backlog) == ⑴) { err_exit("listen error"); } return sockfd; } void onSignalCatch(int signalNumber) { waitpid(⑴,NULL,WNOHANG); } int main() {   //安裝SIGCHLD信號處理函數(shù) signal(SIGCHLD,onSignalCatch); int serverSockfd = mkATCPServer(8002); struct sockaddr_in peerAddr; socklen_t peerLen = sizeof(peerAddr); while (true) { //接受鏈接 int peerSockfd = accept(serverSockfd, (struct sockaddr *)&peerAddr,&peerLen); if (peerSockfd == ⑴) { err_exit("accept error"); } ..... //其他部份代碼與前面類似

多客戶端同時關(guān)閉問題

問題描寫以下:



客戶端代碼實現(xiàn)代碼

//其他代碼如前 //.... int main() { int serverSocket[10]; int socketCount = 10; for (int i = 0; i < socketCount; ++i) { serverSocket[i] = mkATCPClient(8002,"127.0.0.1"); } sleep(100); return 0; }

 在客戶運行進程中按下Ctrl+C,則可以看到在server端啟動10個子進程,并且所有的客戶端全部1起斷開的情況下,產(chǎn)生的僵尸進程數(shù)是驚人的(此時也證明了SIGCHLD信號是不可靠的)!

 

 

解決方法:

//server端部份代碼以下: //其他如前.... void onSignalCatch(int signalNumber) {   int ret = 0;   //注意此處!!!! while ((ret = waitpid(⑴,NULL,WNOHANG) != ⑴)) ; } int main() { signal(SIGCHLD,onSignalCatch); int serverSockfd = mkATCPServer(8002);   ...

從下圖可以看出,出了監(jiān)聽server進程,已沒有僵尸進程了!



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日韩色网 | 国产亚洲精品日韩已满十八 | 国产精品嫩草影院在线播放 | 最近最新的中文字幕大全3 最近最新高清免费中文字幕 | 成人精品一区二区不卡视频 | 亚洲精品国产一区二区三 | 中国在线观看www视频 | 日韩欧美一区二区三区不卡 | 亚洲国产成人资源在线桃色 | 成人不卡在线 | 毛片网站观看 | 一区二区视频在线观看高清视频在线 | 国产码一区二区三区 | 国产一级理论免费版 | www.中文字幕在线观看 | 中国国产成人精品久久 | 密桃av | 欧美日韩a级a | 久久久久久久综合 | 国产欧美日韩在线观看一区二区三区 | 欧美日韩亚洲综合久久久 | 国产成人精品免费视频大全五级 | 亚洲爱色 | 国产最新精品2020好看的 | japanese18日本护士 | 日韩人成 | 欧美一区高清 | 欧美精品在线一区 | 日本高清无卡码一区二区久久 | www伊人网| 亚洲色图日韩 | 亚洲欧美日韩国产综合 | free性vido另类重口 | 69av视频在线观看 | 91精品一区二区三区在线 | 国产一区二区日韩欧美在线 | 欧美 日韩 视频 | 97成人在线观看 | 亚洲精品不卡久久久久久 | jizz在线观看视频 | 一区二区三区四区在线 |