linux——孤儿进程和僵尸进程

1、孤儿进程

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

为了释放子进程的占用的系统资源:

进程结束之后,能够释放用户区空间

释放不了PCB,必须由父进程释放

  • 父进程先运行,直接打印,然后立刻退出
  • 子进程 sleep (1),等 1 秒后才打印
  • 子进程打印时,父进程已经死了 → 子进程变成孤儿进程,被系统领养

父进程先运行,直接打印,然后立刻退出

子进程 sleep (1),等 1 秒后才打印

子进程打印时,父进程已经死了 → 子进程变成孤儿进程,被系统领养

2、僵尸进程

是一个已经死掉了的进程

一个比较特殊的状态,当进程退出父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会在以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。

复制代码
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
        pid_t pid;

        pid = fork();
        if(pid == 0)
        {

                printf("child process pid id %d ppid = %d\n",getpid(),getppid());
        }
        else if(pid >0)
        {
                while(1)
                {
                        sleep(1);
                        printf("parent process pid id %d ppid = %d\n",getpid(),getppid());
                }
        }
        return 0;
}

父进程死循环,永远不退出

子进程打印一次,直接退出

子进程的父进程一直活着 → 子进程不是孤儿!PPID 就是父进程 PID

父进程每隔 1 秒打印一次自己

孤儿进程:

父死,子活着 → 被系统领养

僵尸进程:

父活着,子死了 → 父不收尸 → 子变僵尸

相关推荐
小六学编程6 分钟前
Linux 下 gcc / g++ 编译过程详解:从编译到链接
linux·c/c++
许彰午6 分钟前
在PowerBuilder里手写XML序列化——没有现成库的年代怎么拼报文
xml·linux·服务器
ReadVersion13 分钟前
Ubuntu 22.04 设置时区
linux·运维·ubuntu
dawei.wang13 分钟前
embedit报错
linux
赵民勇1 小时前
apt.conf.d配置详解
linux
2023自学中1 小时前
Linux虚拟机,VSCode + GDB 调试配置:launch.json 模板
linux·vscode·嵌入式
RisunJan1 小时前
Linux命令-ntsysv(集中管理系统的各种服务)
linux·运维·服务器
Championship.23.241 小时前
Linux 3.0 USB机制深度解析:USB 3.0支持与传统外设驱动架构
linux·运维·架构·usb
剑神一笑1 小时前
Linux lsblk 命令详解:块设备信息查看与磁盘管理实战
linux·运维·服务器
2023自学中1 小时前
Linux 解压命令速查表
linux·服务器·嵌入式·开发板