`
nigelzeng
  • 浏览: 605772 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】什么是Linux的僵尸(zombie)进程

阅读更多

 

      可能很少有人意识到,在一个进程调用exit了之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所 有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有 任何内存空间。

 

      僵尸进程的来由,要追溯到Unix,Unix的设计者们设计这个东西并非是因为闲来无事想装装酷什么的。上面说到,僵尸进程中保存着很多对程序员和系统管理员非常重要的信息,首先,这个进程是怎么死亡的?是正常退出呢,还是出现了错误,还是被其它进程强迫退出的?也就是说,这个程序的退出码是什么?其次,这个进程占用的总系统CPU时间和总用户CPU时间分别是多少?发生页错误的数目和收到信号的数目。这些信息都被存储在僵尸进程中,试想如果没有僵尸进程,进程执行多长我们并不知道,一旦其退出,所有与之相关的信息都立刻都从系统中清除,而如果此时父进程或系统管理员需要用到,就只好干瞪眼了。

 

      所以,进程退出后,系统会把该进程的状态变成Zombie,然后给上一定的时间等着父进程来收集其退出信息,因为可能父进程正忙于别的事情来不及收集,所以,使用Zombie状态表示进程退出了,正在等待父进程收集信息中。

Zombie进程不可以用kill命令清楚,因为进程已退出,如果需要清除这样的进程,那么需要清除其父进程,或是等很长的时间后被内核清除。因为 Zombie的进程还占着个进程ID号呢,这样的进程如果很多的话,不利于系统的进程调度。

下面,让我们来看看一个示例:

 

 

/* zombie.c */
#include <sys/types.h>
#include <unistd.h>  main()
{
     pid_t pid; 
     pid=fork();
     if(pid<0) { /* 如果出错 */ 
         printf(error occurred! );
    }else if(pid==0){ /* 如果是子进程 */ 
         exit(0);
     }else{  /* 如果是父进程 */ 
        sleep(60);  /* 休眠60秒 */ 
         wait(NULL); /* 收集僵尸进程 */
     }
}
 

 

编译这个程序:

 

 

$ cc zombie.c -o zombie
 

后台运行程序,以使我们能够执行下一条命令

 

 

 

$ ./zombie &
 [1] 1217
 

列一下系统内的进程

 

 

 
 $ ps -ax
 ... ...
 1137   pts/0   S   0:00   -bash
 1217   pts/0   S   0:00   ./zombie
 1218   pts/0   Z   0:00   [zombie]
 1578   pts/0   R   0:00   ps   -ax
 

      其中的”Z”就是僵尸进程的标志,它表示1218号进程现在就是一个僵尸进程。

收集Zombie进程的信息,并终结这些僵尸进程,需要我们在父进程中使用waitpid调用和wait调用。这两者的作用都是收集僵尸进程留下的信息,同时使这个进程彻底消失。

 

 

------------------------------------------------------------全文完-----------------------------------------------------

本文转自:http://www.linuxso.com/a/linuxxitongguanli/187.html

分享到:
评论

相关推荐

    「杀不掉的」僵尸(zombie)进程

    ### 僵尸(zombie)进程详解与处理方法 #### 一、僵尸进程定义与状态 在Linux系统中,进程可以处于多种不同的状态,而其中一种特殊的状态被称为“僵尸”状态(Z)。当一个进程终止时,其父进程应当通过`wait()`或`...

    僵尸进程介绍以及防范

    僵尸进程是计算机操作系统中的一种特殊状态,当一个进程执行完毕并退出,但其父进程尚未读取其退出状态时,这个已结束的进程就会成为僵尸进程。它的主要特征是进程已不再执行任何代码,但其进程描述符仍然存在于内存...

    Linux寻找和杀掉僵尸进程的命令和方法

    在Linux系统中,僵尸进程(Zombie Process)是一种常见的系统问题,它们通常是由父进程创建的子进程在完成任务后未能被父进程正确回收而遗留下来的。这些僵尸进程虽然不再执行任何操作,但仍然占据着系统资源,如...

    LINUX查看和处理僵死进程

    有些ZOMBIE进程时用kill -9也不能杀死,而且消耗了很多系统资源不能释放,如果系统在shutdown时发出信息:some process wouldn’t die。这就意味着有些进程不能被reboot发出的kill –9杀掉,这些很可能就是僵尸进程...

    Linux下的进程状态

    ### Linux下的进程状态详解 在Linux系统中,进程是操作系统进行资源分配和调度的基本单位,是程序执行的一个实例。为了更好地管理和控制进程,Linux定义了一系列的进程状态来表示进程当前所处的不同情况。理解这些...

    Linux 僵尸进程产生原因及解决方法

    在Linux操作系统中,僵尸进程(Zombie Process)是一种特殊状态的进程,它的产生与操作系统的进程生命周期管理和资源回收机制紧密相关。当一个进程执行完毕并退出时,内核并不会立即清除该进程的所有信息,而是将其...

    linux操作系统进程管理 课程设计

    首先,让我们了解什么是进程。在计算机系统中,进程是程序在执行时的一个实例,它包含了程序代码、数据、栈、堆以及一个进程控制块(PCB),用于存储进程的状态、优先级等信息。Linux系统中的进程可以通过`ps`命令...

    Linux操作系统进程管理学习教案.pptx

    RUNNING进程可能正在运行或等待调度,INTERRUPTIBLE进程在等待资源时可以被信号唤醒,而STOPPED进程用于调试,ZOMBIE进程已结束但未完全清除。 理解并掌握这些知识点对于深入学习Linux系统管理和编程至关重要,因为...

    谈谈守护进程和僵尸进程

    - **僵尸进程**(Zombie Process):是已经结束但其父进程尚未调用 `wait()` 或 `waitpid()` 函数进行清理的进程。僵尸进程的存在仅仅是因为它们的父进程没有正常地清理它们的资源,它们的状态被标记为 “ZOMBIE”,...

    Linux进程调度策略分析

    5. **TASK_ZOMBIE(僵尸状态)**:进程已退出,但父进程尚未调用`wait`函数获取其退出状态。 ##### 2.2 进程调度策略 Linux进程调度策略主要分为两大类:实时进程调度和非实时进程调度。 1. **实时进程调度**:...

    Linux内核分析(进程与进程调度) 北航软件学院课件

    6. **僵尸态(Zombie)**:进程已终止,但父进程尚未回收其资源。 #### 进程调度 Linux采用多种调度策略,如完全公平调度器(CFS,Completely Fair Scheduler),基于进程的优先级和实时性需求进行调度。调度依据...

    Linux进程、线程和调度(1)

    进程生命周期包括就绪(ready)、运行(running)、睡眠(sleep)、停止(stopped)和僵死(zombie)等状态。在Linux中,进程调度通常由调度器(scheduler)负责,其采用优先级和时间片轮转等算法来决定进程获得CPU...

    Linux进程结构

    - **僵尸(Zombie)**:进程已终止但其父进程尚未读取其退出状态,这时进程会变为僵尸状态。 - **终止(Dead)**:进程完全终止,等待系统回收资源。 #### 3. 进程间通信(IPC) Linux提供了多种进程间通信(IPC...

    Linux daemon process and zombie process

    ### Linux 守护进程(Daemon Process)与僵尸进程(Zombie Process) #### 一、守护进程(Daemon Process) 守护进程是Linux系统中的一个重要概念,它是一种后台运行的进程,主要负责执行特定的任务或提供某种服务...

    熟悉Linux命令及进程管理.pdf

    4. zombie 进程:用于学习僵尸进程的概念。例如,输入 zombie.c 文件,编译和运行后,可以学习僵尸进程的基本概念。 5. ps 命令:用于显示当前系统中的进程列表。例如,输入 ps -ax 命令,可以显示当前系统中的进程...

    linux系统进程管理

    - **僵尸状态 (Zombie)**:进程已经结束,但其父进程尚未对其进行清理。这类进程只保留了PID和退出状态等少量信息,不会占用CPU资源,但会影响系统性能。 - **退出状态 (Exit)**:进程已完成所有工作,即将被系统...

    Linux进程编程介绍 Linux进程编程介绍.TXT

    5. **僵尸状态(Zombie)**:子进程结束但父进程尚未读取其退出状态时的状态。 #### 进程状态转换 进程状态之间可以通过一系列系统调用来进行转换: - 当一个进程从就绪状态变为运行状态时,通常是因为它获得了...

    Linux操作系统进程管理PPT学习教案.pptx

    - Linux中,进程有五种状态:运行(TASK_RUNNING)、可中断睡眠(TASK_INTERRUPTIBLE)、不可中断睡眠(TASK_UNINTERRUPTIBLE)、暂停(TASK_STOPPED)和僵尸状态(TASK_ZOMBIE)。 - 进程状态转换通常发生在系统...

    L5 Linux进程管理1

    而`int exit_state`字段则用于表示进程退出时的状态,如`EXIT_ZOMBIE`(僵尸进程)和`EXIT_DEAD`(已结束)。\n\nLinux提供了多种创建进程的方法,最常见的是通过`fork()`系统调用创建子进程,它创建了一个与父进程...

Global site tag (gtag.js) - Google Analytics