zoukankan      html  css  js  c++  java
  • 僵尸进程与孤儿进程

    僵尸进程与孤儿进程都是linux中的理论

    在unix/linux中,正常情况下,子进程是通过父进程创建的。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态

    1.孤儿进程

    一个父进程退出,而它的多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作

    2.僵尸进程

    一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程

    3.问题及危害

    孤儿进程会被init进程回收,因此孤儿进程并不会有什么危害。

    任何一个子进程在exit()之后,并非马上就消失掉,而是留下一个僵尸进程的数据结构。如果僵尸进程过多,他们会占用cpu及系统进程表中的资源,这样是不好的

    4.僵尸进程的解决方法

    1)毙掉产生大量僵尸进程的父进程

    2)通过信号机制

    子进程退出时向父进程发送SIGGHILD信号,父进程处理SIGGHILD信号。在信号处理函数中调用wait进程处理僵尸进程

    3)fork两次

    世界最优美的情书
  • 相关阅读:
    Java LinkList遍历方式
    Java LinkedList的实现原理
    ArrayList 原理(2)
    ArrayList 原理(1)
    Java中HashMap的实现原理
    Java HashMap两种遍历方式
    【转】Unity3d:读取FBX中的动画
    C#与U3D中字符串尾0
    U3D中的又一个坑
    MaxScript 学习笔记【有转载】
  • 原文地址:https://www.cnblogs.com/xufengnian/p/10569280.html
Copyright © 2011-2022 走看看