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 分钟前
电脑里要装三系统win7/win11/linux,按照什么顺序和格式安装才不会导致启动表出问题?
linux·windows·经验分享·电脑
howard20058 分钟前
3.2.1.3 Linux基本操作 - 用户组操作
linux·用户组操作
ShineWinsu9 小时前
对于Linux:动静态库的制作与原理的解析—下
linux·运维·服务器·进程·链接·虚拟地址空间·
RH23121110 小时前
2026.4.16Linux 管道
java·linux·服务器
handler0110 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
liuyukuan11 小时前
如何在win11上打开 WSL2(Windows 的 Linux 子系统)?
linux·windows
橙子也要努力变强11 小时前
Linux信号机制
linux·服务器·网络
shughui11 小时前
FinalShell / Xshell 完整教程(下载+安装+使用,2026最新版)
linux·fiddler·xshell·xftp·finalshell·远程连接工具
程序猿编码11 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
pengyi87101512 小时前
私网IP映射公网基础原理,搭配代理IP远程访问入门
linux·服务器·网络