Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530530
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-09-19 15:04:23

init.rc脚本的特性和dhcpcd的程序特性导致内存耗尽

init进程会周期性检查所有由init启动的service服务进程,当init通过PID发现由init创建的该服务进程的PID不存在之后(被手工kill掉或者程序fork()之后,关闭了父进程),那么init进程会再次启动[luther.gliethttp].

原init.rc脚本
...
service dhcpcd /system/bin/dhcpcd eth0
    disabled
...
运行一段时间之后,通过ps发现dhcpcd一直在增加,最后耗尽了所有内存,使得系统运行缓慢.

原因:在于dhcpcd程序使用了fork(),然后关闭掉父进程,子进程进入daemon,但是android的init程序周期性检查所有service发现,被init创建出来的service的PID消失了,于是将再次start service启动dhcpcd,其实这时dhcpcd是以子进程的身份运行在daemon后台,所以导致dhcpcd程序一直持续不断的被init进程创建.

临时解决方案:
修改后脚本
...
service dhcpcd /system/bin/dhcpcd eth0
    disabled
    oneshot //表示init进程仅对该service启动一次[luther.gliethttp]
...
阅读(4977) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2009-05-09 15:00:32

给您发邮件了,查收一下,期待交流……