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 秒打印一次自己

孤儿进程:

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

僵尸进程:

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

相关推荐
kkkkkkkkkk_Z17 小时前
新手自学嵌入式 | 学习日记: Linux驱动进阶 —— Platform总线与I2C子系统实战
linux·运维·学习
Android系统攻城狮17 小时前
Linux Gstreamer深度解析之gst_audio_aggregator_set_sink_caps调用流程与实战(九十一)
linux·运维·服务器·gstreamer音视频·音视频进阶
‎ദ്ദിᵔ.˛.ᵔ₎17 小时前
Linux线程:this指针在pthread中的解决方案
linux
tedcloud12317 小时前
Docker Compose 部署 Memos:从安装到备份恢复
linux·开发语言·jvm·后端·docker·容器·rust
qq_3775727717 小时前
typora install linux ubuntu
linux·ubuntu
John_Hui17 小时前
CentOS7安装Nginx
linux·服务器·nginx
qetfw17 小时前
Bash 基础:脚本执行、引号与命令替换验证
linux·开发语言·chrome·bash
怪力左手17 小时前
cuda-toolkit离线安装
linux·运维·人工智能
无人生还别怕17 小时前
如何搭建k8s服务(docker部署)
linux·运维·docker·云原生·容器·kubernetes·openanolisos
Lsetea17 小时前
curl下载HTTPS正文是乱码:--compressed与Content-Encoding分层排查
linux·http·https·ssl证书·curl