linux网络编程wait()和waitpid()的讲解

来源: 电脑维修教程   阅读:     发表时间:

本文讲的是关于wait和waitpid二者的区别与联系。为避免僵尸历程的发生,不管我们什么时辰建立子历程时,主历程都需要期待子历程返回,以便对子历程进行

本文讲的是关于wait和waitpid二者的区别与联系。为避免僵尸历程的发生,不管我们什么时辰建立子历程时,主历程都需要期待子历程返回,以便对子历程进行清理。为此,我们在服务器法式中添加sigchld旌旗灯号处置函数。

客户端断开毗连后,服务器端存在大量僵尸历程。这是因为服务器子历程终止后,发送sigchld旌旗灯号给父历程,而父历程默认疏忽了该旌旗灯号。为避免僵尸历程的发生,不管我们什么时辰建立子历程时,主历程都需要期待子历程返回,以便对子历程进行清理。为此,我们在服务器法式中添加sigchld旌旗灯号处置函数。

复制代码

代码以下:

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <netdb.h>

#define serv_port 1113

#define listenq 32

#define maxline 1024

/***毗连处置函数***/

void str_echo(int fd);

void

sig_chld(int signo)

{

pid_t pid;

int stat;

pid = wait(&stat);//获得子历程历程号

printf("child %d terminatedn", pid);

return;

}

int

main(int argc, char *argv[]){

int listenfd,connfd;

pid_t childpid;

socklen_t clilen;

struct sockaddr_in servaddr;

struct sockaddr_in cliaddr;

//struct sockaddr_in servaddr;

//struct sockaddr_in cliaddr;

if((listenfd = socket(af_inet, sock_stream,0))==-1){

fprintf(stderr,"socket error:%sna",strerror(errno));

exit(1);

}

/* 服务器端填充 sockaddr布局*/

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_addr.s_addr = htonl (inaddr_any);

servaddr.sin_port = htons(serv_port);

signal(sigchld,sig_chld);//处置sigchld旌旗灯号

以上是:解决linux网络编程wait()和waitpid()的讲解问题的详细资料教程

?
热门链接: 机顶盒 | 主板维修 | 声卡怎么安装 | 路由器怎么设置 | 电脑内存维修技术 | 维修大全?| 主板维修资料 | 电脑声卡音响故障维修 | 内存 | 显示器 | 电源维修教程 | cpu | 硬盘 | 显卡 |win8操作系统教程|linux操作系统教程|ubuntu操作系统教程|mac苹果操作系统教程|execl教程
友情链接: ?苹果手机维修?| 更多...