对应书籍

《tcp/ip网络编程 》第10章 多进程服务器端
《UNIX环境高级编程 第3版》第7、8章部分内容

一些基本名词

以下提到一些概念, 留一个印象,后面会详细解释.

  1. 进程
  2. 父进程-子进程 fork
  3. 僵尸进程
  4. wait waitpid
  5. 信号 signal sigaction
  6. 多进程

并发服务器端实现方法

  我们之前写的服务器, 都是处理完一个客户端再处理下一个客户端. 我们现在想像一种方式能同时给所有客户端服务, 也就是说客户端不用排队了.
  现实生活中, 一般一个客服同时只能和一个客户说话, 但是计算机处理速度很快, 可以在不同客户端之间快速切换.
实现方法

  1. 多进程服务器
  2. 多路复用服务器: 通过捆绑并统一管理I/O对象提供的服务
  3. 多线程服务器

进程的基本概念

  略

父进程与子进程

创建子进程

  一个进程想要创建一个子进程得用fork; 具体用法看《UNIX环境高级编程》P182
tcp/ip网络编程[笔记四] - 图1

终止子进程

  我们平时是调用exit(0)或者在main函数里面return 0就可以终止进程. 但实际上这个时候内核会向其父进程发送SIGCHLD信号. 父进程可以选择忽略进程或者信号发生时即被调用的信号处理函数.父进程默认忽略这种信号. 如果父进程忽略信号, 那么子进程不会终止, 而是会留下来, 成为僵尸进程.
调用wait或waitpid可以处理这种信号.

wait

watipid

写一个多进程回声服务器/客户端

  1. 主进程循环调用accept
  2. 调用完accept, fork一个子进程
  3. 子进程通过套接字与客户端传输消息
  4. 父进程通sigaction处理结束的客户端