sunplusedu的个人空间 https://blog.eetop.cn/sunplusedu [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

如何有效解决僵尸进程

已有 1286 次阅读| 2013-10-15 14:04 |个人分类:嵌入式学习

    新手入门学习如何有效解决僵尸进程,下面是来自凌阳教育网小编整理的关于解决僵尸进程的方法的总结。

 

    一、产生原因

    进程结束时都做些什么呢? 做这么几件事情:

    1)  释放资源,包括内存资源,文件标识符,数据库连,设备资源等等

    2)  调用exit系统调用

    3)  修改进程表状态为僵死状态(Zombie),使用ps el查看状态为Z,进程表保存的信息包括:进程ID、进程状态、运行时间等等

    4)  发送信号SIGHUP给父进程(除INIT进程外,其他进程都有父进程),等待其回收进程表资源

    因此进程结束之后,并没有完全结束,而是进入了僵死状态,等待父进程回收;

父进程回收之前,僵死进程基本不占任何资源,仅仅占系统进程表的一个进程号和一条记录,由于系统的进程号资源是有限的,如果系统产生大量的僵死进程,会导致系统无法产生新进程。

 

    二、查看方法

    ps ely    #S列为Z值的记录

    #linux系统下,自动脚本

    ps ely | gawk $1==Z”’

    或者

    ps ef | grep defunct | grep grep

    复杂点的脚本:lZombie.sh

    cat lZombie.sh

    #look for processes of zombie state

    #get the position of S state

    i=1

    ps ely| awk NR==1| while read line

    do

    if [ $line = S ]

    then

    break

    fi

    done

    #print the info of zombie processes

    ps ely| awk $”’$i’”==Z”’

#或者 ps ely| awk $$i==Z”’

 

    三、处理方法

    1)       通知父进程子进程回收僵死进程

    Kill s SIGCHLD PPID

    2)       如果确认父进程及其子进程已经无用,则直接杀死父进程及其子进程,INIT拖挂僵死进程后会自动清理之

    Kill s SIGTERM PPID PID1 PID2

kill -15 PPID PID1 PID2

 

    四、如何避免

    1)  父进程通过wait或waitid等函数回收僵死子进程

    2)  子进程结束时,主动发送SIGCHLD信号给父进程,父进程在信号处理模块调用wait函数

    3)  父进程不关心子进程什么时候结束,那么可以使用signal(SIGCHLD, SIG_IGN)通知内涵,父进程对子进程不感兴趣,那么子进程结束后,内核直接回收;或者用sigaction函数为SIGCHLD信号设置SA_NOCLDWAIT:

    struct sigaction sa;

    sa.sa_handler = SIG_IGN;

    sa.sa_flags = SA_NOCLDWAIT;

    sigemptyset(&sa.sa_mask);

    sigaction(SIGCHLD, &sa, NULL);

    4)  fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要父进程来做。

    转自深圳嵌入式培训 网,原链接:http://emb.sunplusedu.com/answer/2013/1015/2161.html

 

 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 2

    评论
  • 1927

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 22:41 , Processed in 0.012382 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部