zoukankan      html  css  js  c++  java
  • 第九章 守护进程与socket编程(重点)

    (一) 守护进程

       守护进程(Daemon)是指那些随着系统启动,一直运行于系统整个生命周期的系统程序,它们一般不受用户登录注销影响。 它独立于控制终端并且周期性地执行某种任务或等待。

       会话(session)是一个多个进程组的集合,每个进程都有一个父进程并且属于一个进程组,每个进程组都有一个进程组号,该号等于该进程组组长的PID号,一个进程只能为它自己或子进程设置进程组ID号。

       每个进程都属于一个进程组,而进程组又属于某个会话。当用户从终端登录系统(不管是终端还是伪终端),系统会创建一个新的会话。在该终端上启动的进程都会被系统划归到会话的进程组中。 会话中的进程通过该会话中的领头进程(常称其为控制进程)与一个终端相连。该终端是会话的控制终端。一个会话只能有一个控制终端,反之一样。如果会话存在一个控制终端,则它必然拥有一个前台进程组。属于该组的进程可以从控制终端获得输入。这时,其他的进程组都为后台进程组。

      创建守护进程步骤:

      1>  脱离父进程  fork 创建子进程且退出父进程。这样,子进程将变成孤儿进程,并被init进程接管,同时,所产生的新进程将变为在后台运行。

      2> 调用setsid函数 使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程。

         由于守护进程没有控制终端,而使用fork函数创建的子进程继承了父进程的控制终端、会话和进程组,因此,必须创建新的会话,以脱离父进程的影响。
    setsid函数将创建新的会话,并使得调用setsid函数的进程成为新会话的领头进程。调用setsid函数的进程是新创建会话中的惟一的进程组,进程组ID为调用进程的进程号。setsid函数产生这一结果还有个条件,即调用进程不为一个进程的领头进程。由于在第一步中调用fork的父进程退出,使得子进程不可能是进程组的领头进程。该会话的领头进程没有控制终端与其相连。至此,满足了守护进程没有控制终端的要求 

      3>更改当前工作目录 ,守护进程一般会将其工作目录更改到根目录.

      4>关闭文件描述符.

      5>设置守护进程的文件权限创建掩码 .

      6> 功能实现

    (2)Socket

      Socket 套接口,是网络通信的载体。(相当于你告诉它目的地址,它就会把数据运送的目的地址)。

      Socket建立: int socket(int domain, int type, int protocol);

        Socket配置: int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

      监听连接:  int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

      连接建立: int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);
      数据传输: 

        1> TCP :  int send(int sockfd, const void *msg, int len, int flags);

              int recv(int sockfd,void *buf,int len,unsigned int flags);

        2> UDP :  int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

              int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);


      结束传输:  int shutdown(int sockfd,int how);

    (3) 感言

      由于linux 开发大多用于服务开发模型,不会面向桌面(当然 除了嵌入式),而服务开发有离不开网络。所以将二者结合起来讲解。本章事例程序参见 【工程库】/【跨平台服务开发模板】http://www.cnblogs.com/wolfrickwang/p/3192941.html。 

     

  • 相关阅读:
    hdu1010
    hiho1041
    cg基础
    python下载网页转化成pdf
    QT笔记 -- (6) opengl
    QT笔记 -- (5) 实现QWidget的paintEvent函数,在widget上画背景图形
    程序媛成长之路--厚积薄发
    mysql集群搭建教程-基础篇
    JAVA遇见HTML——tomcat篇
    【DRP】——JSP+servlet
  • 原文地址:https://www.cnblogs.com/wolfrickwang/p/3192949.html
Copyright © 2011-2022 走看看