首先介绍多进程并发服务器的内容,然后遵循步骤描述如何使用它。最后,完整服务器的代码,WRAP.C错误处理代码和客户端代码。
服务器可以分为两种类型:迭代服务器和并发服务器。
Linux有三种实现并发服务器的方法:多进程并发服务器,多线程并发服务器,Multi -way IO REUSE。
多过程并发服务器实现框架。
来源
编写Multi -Process并发服务器的基本思想:
3.1为什么我要关闭FD?
1.保存系统资源2。防止上面提到的上述父母和子处理。3。确保关闭功能可以正确关闭覆盖字符。
3.2为什么您可以确保正确的转弯?
  由于参考计数。每个文件描述符或套接字中都有一个参考计数机制。只有当它的参考计数变为0时,它才能真正清理并释放喷气单词的资源。
3.3为什么父进程关闭(CFD),子过程关闭(LFD)不会导致与断开连接的连接?
  由于父进程叉(),子进程。它是副本自身的地址空间来提供子进程。目前,子进程具有与父进程打开的相同文件描述符!也就是说,父和儿子的过程具有监视集和连接口号。特定时刻为2.建立连接后,父进程关闭了连接插槽,并关闭了监视集。两者的参考计数变为1。
3.4如果父进程从未关闭连接缝词,发生了什么?
  如果子过程没有在LFD上进行错误操作,则它没有太大的效果,因为它手中有两个FDS和CFD。它已经接受并一直在生成CFD。由于通常在任何时候可以打开的描述符的数量通常受到限制。如果父进程没有关闭连接集,则将导致插座资源的耗尽,并且不会终止客户连接。由于这些连接器的参考计数值始终为1,因此不可能为0。
3.5为什么它会导致插座资源的耗尽?
  当执行高和辅助TCP连接处理时,必须同时受到系统的单个过程的最高并发编号(这是因为系统需要为每个TCP连接创建一个套接字手柄,每个TCP连接每个TCP连接。此套接字手柄也是文件句柄)。ulimit -n命令可用于查看当前用户进程的文件数。
  在这里说的是,不仅资源受到限制,而且插座建立的机制,也可以说是文件描述性符号的机制。每个过程保留了PCB中的文件描述符表(过程控制块)。文件描述符是该表的索引。每个表都有一个指针打开文件。创建该过程时,打开了标准输入,标准输出和标准错误输出设备文件,并记录了相应的文件描述符0、1和2其他文件在该过程中打开,系统将在文件描述的描述符表中返回最小文件描述符,并在表中记录该文件的描述符。这等同于一一消费FD资源。
  
3.6 Accept()反复分配给CFD。为什么不涵盖CFD,并且没有涵盖文件描述符表上的资源?
  用户使用文件描述访问文件。FD在那里创建它,只需通过关闭来减少参考计数。通过分配该值,服务器丢失了CFD的旧值并获得了CFD的新值。这仅意味着服务器通过CFD丢失了旧文件的控制,但这并不意味着旧的CFD在文件描述符表中消失。
5.1为什么要回收孩子的过程?
  为了处理僵尸过程并避免占用内核资源。
该过程终止有两种可能性:
  在该过程产生孤儿过程之前终止该过程的父进程。所有子过程的父进程都更改为INIT进程,该过程由INIT进程采用。在过程终止中,系统将检查所有活动过程一一确定这些过程是否是即将终止的子处理。因此,如果该过程的父进程ID更改为1(INIT ID)。此保证每个过程都有父程处理。
  子过程在父进程之前终止僵尸的过程。系统内核将为每个终端过程保存一些信息,以便父母输入可以通过调用wait()或waitpid()或waitpid()来获取子过程的终止信息()函数。终端过程保存的信息包括过程ID,该过程的终止以及该过程中使用的CPU时间总数。当父进程调用Wait()或WaitPID()函数时,系统内核可以释放终止过程使用的所有存储空间以关闭其所有开放文件。
5.2如何处理父过程的过程,您有时间回收此子过程,并生成僵尸过程?
  您可以通过父进程sigchld信号捕获信号:当过程是正常或异常时,它会将sigchld信号发送到父亲的过程中。默认情况下该函数,捕获Sigchld信号,然后将信号处理功能中的WaitPID函数调用为“完全结束”子过程。
5.3为什么是while((waitpid(0,null,wnohang))> 0),为什么是键?
  选项参数wnohang:如果未退出PID指定的子过程,请立即返回,则将不会阻止等待。目前,返回值为0。
  当同时发送多个信号时,Catch_Child仅执行一次,但是由于存在waitpid之后,它返回了waitpid,然后Waitpid将检查是否存在流程状态更改。继续执行,您可以恢复其他子过程的资源。如果没有,请返回0并退出循环。因此,请使用周期来处理它。回收僵尸过程。
Linux并发服务器编程多进程并发服务器
为什么这样做((pid = waitpid(-1,&stat,wnohang,wnohang))> 0)可以处理所有子过程
恰恰是(pid = waitpid(-1,&stat,wnohang,wnohang))> 0)我不明白,现在我明白了
文件描述概述
如何处理僵尸以及如何处理
并发服务器编程模型
原始:https://juejin.cn/post/7101549535960236069