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

孤儿进程:

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

僵尸进程:

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

相关推荐
一技安身1 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师2 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
迷途呀2 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
赴生-2 小时前
Liunx 操作系统 进程概念(上)
linux
binqian3 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌3 小时前
Shell编程——if条件语句
linux·运维·shell
Dawn-bit3 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马3 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器
mounter6254 小时前
Linux 7.2 引入更灵活的块设备错误注入机制
linux·linux kernel·kernel·disk·error injection
cpolar技术支持4 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障