对应书籍
《tcp/ip网络编程 》第10章 多进程服务器端
《UNIX环境高级编程 第3版》第7、8章部分内容
一些基本名词
以下提到一些概念, 留一个印象,后面会详细解释.
- 进程
- 父进程-子进程 fork
- 僵尸进程
- wait waitpid
- 信号 signal sigaction
- 多进程
并发服务器端实现方法
我们之前写的服务器, 都是处理完一个客户端再处理下一个客户端. 我们现在想像一种方式能同时给所有客户端服务, 也就是说客户端不用排队了.
现实生活中, 一般一个客服同时只能和一个客户说话, 但是计算机处理速度很快, 可以在不同客户端之间快速切换.
实现方法
- 多进程服务器
- 多路复用服务器: 通过捆绑并统一管理I/O对象提供的服务
- 多线程服务器
进程的基本概念
略
父进程与子进程
创建子进程
一个进程想要创建一个子进程得用fork; 具体用法看《UNIX环境高级编程》P182
![tcp/ip网络编程[笔记四] - 图1](/uploads/projects/xuwuzhongdezhenyan@cr0cgo/aa3a852911d72d4ded4d02790728eb58.jpeg)
终止子进程
我们平时是调用exit(0)或者在main函数里面return 0就可以终止进程. 但实际上这个时候内核会向其父进程发送SIGCHLD信号. 父进程可以选择忽略进程或者信号发生时即被调用的信号处理函数.父进程默认忽略这种信号. 如果父进程忽略信号, 那么子进程不会终止, 而是会留下来, 成为僵尸进程.
调用wait或waitpid可以处理这种信号.
wait
watipid
写一个多进程回声服务器/客户端
- 主进程循环调用accept
- 调用完accept, fork一个子进程
- 子进程通过套接字与客户端传输消息
- 父进程通sigaction处理结束的客户端
