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

孤儿进程:

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

僵尸进程:

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

相关推荐
星恒随风5 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
唐墨1239 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元9 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
AR-26710-12 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风13 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵13 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
瓦瓦gogo14 小时前
从一个 TypeScript 函数开始理解 MCP 协议
linux·ubuntu·typescript
鱼听禅15 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
测试界的小码农16 小时前
【Linux 命令实战(04):文件内容查看,掌握 cat、less、head、tail】
linux·服务器·less
CodeYp201916 小时前
第13讲:HTTPS 协议原理
linux·https