一个“永不结束”的服务端进程
2015-08-13 14:46
387 查看
以前只知道一个端口用同一个协议只能有一个进程来监听;fork会继承文件描述符。
遂有疑惑,若先listen,再fork,后accept,哪个进程得到客户端的链接?
通过实验,得出结论:
fork之后两个进程会抢占accept的机会,没抢到的进程会阻塞,等待有权accept的进程死掉,然后去accept。
过程:
当启动进程后,用netstat命令查看到在监听的pid,只能看到一个pid在那监听;
然后,用浏览器去链接这个端口,这时在监听的进程接收消息,然后sleep,再用netstat查看,在监听端口的pid没变;
sleep时间到,进程结束,这时用nentstat查看,pid变成了另一个
应用:
用于多进程提供服务是不行的,但是,可以用于防服务进程挂掉,一旦主服务进程挂掉,备份马上就会顶上去,只要备份进程再去fork一个子进程作为备份进程,就可以形成一个“永不结束”的进程。一来避免了服务器死掉再人工启动的反应时间,二来,不必等待监听的进程挂掉后释放端口的时间。
遂有疑惑,若先listen,再fork,后accept,哪个进程得到客户端的链接?
通过实验,得出结论:
fork之后两个进程会抢占accept的机会,没抢到的进程会阻塞,等待有权accept的进程死掉,然后去accept。
过程:
当启动进程后,用netstat命令查看到在监听的pid,只能看到一个pid在那监听;
然后,用浏览器去链接这个端口,这时在监听的进程接收消息,然后sleep,再用netstat查看,在监听端口的pid没变;
sleep时间到,进程结束,这时用nentstat查看,pid变成了另一个
应用:
用于多进程提供服务是不行的,但是,可以用于防服务进程挂掉,一旦主服务进程挂掉,备份马上就会顶上去,只要备份进程再去fork一个子进程作为备份进程,就可以形成一个“永不结束”的进程。一来避免了服务器死掉再人工启动的反应时间,二来,不必等待监听的进程挂掉后释放端口的时间。
相关文章推荐
- 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(三)
- EasyUI combobox下拉列表框--下拉列表框的onShowPanel事件
- 深入理解SELinux SEAndroid
- hdu 1823 Luck and Love
- Java post 请求
- HDU ACM 2010 水仙花数
- 浅谈 qmake 之 pro、pri、prf、prl文件
- 重新认识Segment fault
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
- jquery.Validation.js使用手册,案例Demo
- MATLAB图像处理函数汇总(二)
- The connection to adb is down解决方案
- C#实现求一组数据众数的方法
- html5初始化时间控件
- Apache配置正向代理与反向代理
- 四个级别的 “自由” 程序员
- ajax与异步请求
- Sphinx介绍
- IP封包的封装 - 首部内容
- IP封包的封装 - 首部内容