zoukankan      html  css  js  c++  java
  • Linux下僵尸进程(Zombie process)深入理解

    僵尸进程最核心的问题是:为什么子进程的善后要父进程处理。

    百度百科阐述道,一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构,显然找不到我想要答案。

    维基百科阐述道,On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution but still has an entry in the process table.

    现在我知道了,有个process table需要父进程处理。到底子进程退出时做了哪些事情呢?

    首先,一个进程的结构如下:

       task[]数组中一项,指向了该进程的task_struct和内核堆栈所在页面

          GDT中两项,一项是TSS描述符,一项是LDT描述符

          若干页目录项和若干页表

    进程的占有的资源如下:

          进程拥有的所有物理页面(包括页表和task_struct所占页面)

          进程打开的所有文件

    一个进程结束了,需要做如下的事情:

          释放所有物理页面

          关闭打开的文件

          清除task[]数组中相关项

    如果清除task[]数组中相关相,进程就不可能被调度函数schedule()再次选中了。子进程结束还需要通知父进程,所以最后一项是由父进程处理。所以就是为什么子进程的善后要父进程处理!!父进程正确处理会调用wait/waitpid对子进程进行最后的清除工作。

     

    详细请见http://blog.csdn.net/yming0221/article/details/6334666

     

     

     

  • 相关阅读:
    web前段知识
    如何查看服务器机型,如何查看软件的版本信息
    selenium server启动失败
    性能测试策略
    mysql_列出表中所有字段用逗号做分隔符
    复杂sql(1)
    orale建表查询
    javascript常用函数集
    orale用户角色管理
    数据流
  • 原文地址:https://www.cnblogs.com/smallmaple/p/2883712.html
Copyright © 2011-2022 走看看