进程与信号之僵尸进程

Posted jmst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与信号之僵尸进程相关的知识,希望对你有一定的参考价值。

孤儿进程:父进程被终结,子进程成为孤儿进程,被init进程接管

僵尸进程:子进程被终结,内存未被释放,形成僵尸进程

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    pid_t pid;
    pid=fork();
    
    if(pid<0)
    {
        printf("fork error");
        exit(1);
    }
    else if(pid ==0)
    {
        //终结子进程
        printf("pid: %d,ppid: %d",getpid(),getppid());
        exit(0); 
    }
    while(1)
    {
        sleep(1);
    }
    exit(0);
}

编译执行

ps -aux |grep fork_zombie

 2557  0.0  0.0   4224   644 pts/8    S    07:40   0:00 ./fork_zombie
 2558  0.0  0.0      0     0 pts/8    Z    07:40   0:00 [fork_zombie] <defunct>
 2560  0.0  0.0  21296   936 pts/8    S+   07:41   0:00 grep --color=auto fork_zombie

<defunct> 为僵尸进程

执行杀死父进程 后僵尸进程成为孤儿进程被init进程接管
kill -9 2557

避免僵尸进程方法:

  1.父进程通过调用wait(),waitpid() 来回收

  2,sigchld 信号处理

  3,编程孤儿进程右init回收

以上是关于进程与信号之僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章

忽略SIGCHLD信号能避免僵尸进程吗

重读APUE(12)-SIGCHLD与僵尸进程

14僵尸进程方式3 4补充

Linux信号详解:signal与sigaction函数

Linux信号详解:signal与sigaction函数1

Linux信号详解:signal与sigaction函数1