linux僵尸进程

来源:互联网 发布:java正则匹配包含邮箱 编辑:程序博客网 时间:2024/05/18 00:50

僵尸进程
1、子进程结束但是没有完全释放内存(在内核中的task_struct没有释放),该进程就成为僵尸进程。
2、当僵尸进程的父进程结束后就会被init进程领养,最终被回收。
3、避免僵尸进程
1)让僵尸进程的父进程来回收,父进程每隔一段时间来查询子进程是否结束并回收,调用wait()或者waitpid() ,通知内核释放僵尸进程。
2)采用信号SIGCHLD通知处理,并在信号处理程序中调用wait函数。
3)让僵尸进程成为孤儿进程,由init进程回收。

/*

 * process_zombie.c
 *
 *  Created on: 2016-11-28
 *      Author: river
 */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    pid_t pid;
    pid = fork();
    if(pid < 0)
    {
        perror("fork error");
        exit(1);
    }
    else if(pid == 0)//子进程
    {
        printf("pid: %d, ppid: %d\n", getpid(), getppid());
        exit(0);//子进程结束,称为僵尸进程
    }

    while(1)//父进程继续做循环
    {
        sleep(1);
    }
    exit(0);
}

0 0