首页 > 代码库 > 一、进程与信号之僵尸进程

一、进程与信号之僵尸进程

孤儿进程:父进程被终结,子进程成为孤儿进程,被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回收

一、进程与信号之僵尸进程