Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492411
  • 博文数量: 78
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-15 20:22
个人简介

技术中沉思的时候最快乐,问题得到完美解决的时候最有成就感!

文章分类

全部博文(78)

文章存档

2013年(39)

2012年(37)

2011年(2)

分类: LINUX

2012-08-21 19:25:31

对 evt driver 和子进程一起做单元测试,为了方便,直接在父进程中先初始化了 evt driver,
其中用的内核事件驱动为 epoll;设想中的子进程在分离后,会产生一份新的epoll驱动;然而却出现了完全

意想不到的事情,看日志:

点击(此处)折叠或打开

  1. [4206#2053186656]: epoll add event: fd:6 ev:1
  2. [4205#2053186656]: epoll add event: fd:5 ev:1
  3. [4206#2053186656]: epoll: 0: fd:6 rev:0001
  4. [4206#2053186656]: epoll: 0: fd:5 rev:0001
日志中的第一个数字为进程号,明显:4205为父进程,4206为子进程;父进程在epoll中监控了fd=5
子进程监控了fd=6;第三行日志为子进程关注的fd=6有数据,正常现象;第四行,竟然出现了一个没注册过
的fd=5事件出来了;epoll事件中的data指向了一个未初始化的地方(实际上是父进程的一个初始化过的
结构);于是崩溃了;

了解了,epoll 是能被子进程继承的,且父子会公用一份内核变量,共享了epoll的所有数据;自然
悲剧了...

于是,如果需要父子进程都需要epoll,一定要分别初始化....
阅读(851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~