zoukankan      html  css  js  c++  java
  • linux进程池模型

    static int nchildren;
    static pid_t* pids;
    int main(int argc,char**argv){
    int listenfd,i;
    socklen_t addrlen;
    void sig_int(int);
    pid_t child_make(int,int,int);
    if(argc==3)
    listenfd=Tcp_listen(NULL,argv[1]),argv[2],&addrlen);
    else
    err_quit("usage:server02");
    nchildren=atoi(argv[argc-1]);
    pids=Calloc(nchildren,sizeof(pid_t));
    for(i=0;i<nchildren,sizeof(pid_t));
    pids[i]=child_make(i,listenfd,addrlen); //这里有父进程和子进程的
    Signal(SIGINT,sig_int);
    while(1)
    pause();
    }
    void sig_int(int signo){ //wait总是返回第一个终止的子进程
    int i;
    void pr_cpu_time(void);
    for(i=0;i<nchildren;i++)
    kill(pids[i],SIGTERM);
    while(wait(NULL)>0)//retunr child pid
    {}
    if(errno!=ECHILD)
    err_sys("wait error");
    pr_cpu_time();
    exit(0);
    }

    pid_t child_make(int i,int listenfd,int addrlen){
    pid_t pid;
    void child_main(int,int,int);
    if((pid=fork()>0)
    return pid;
    child_main(i,listenfd,addrlen);
    }
    void child_main(int i,int listenfd,int addrlen)
    { int connfd;
    void web_child(int);
    socklen_t clilen;
    struct sockaddr*cliaddr;
    cliaddr=Malloc(addrlen);
    while(1){
    clien=addrlen;
    connfd=accept(listenfd,cliaddr,&clilen);
    web_child(connfd);
    close(connfd);
    }
    }


  • 相关阅读:
    Hadoop之MapReduce
    Hadoop之序列化
    Hadoop之mapreduce 实例五
    Hadoop之hive和hadoop的交互流程
    protel总结1
    将正数十进制转换为2~16进制数
    基于verilog分频器总结
    MATLAB设计FIR滤波器
    centos7+hadoop完全分布式集群搭建
    Linux下常用配置文件
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4458534.html
Copyright © 2011-2022 走看看