进程中产生僵尸和孤儿

2023-05-16

孤儿进程:

  • 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。

    孤儿进程其实对于操作系统来说是没有太大的危害,在孤儿进程中父进程结束了之后,子进程就被init进程领养了,这时候我们不需要去管理我们的子进程,init进程会自动的释放我们子进程的资源,不会导致我们的资源浪费
    导致孤儿进程我们可以看到下面代码所产生的结果

//orphan.c 孤儿进程演示
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void)
{
    pid_t pid;
    pid = fork();

    if (pid == 0) {
        while (1) {
            printf("I am child, my parent pid = %d\n", getppid());
            sleep(1);
        }
    } else if (pid > 0) {
            printf("I am parent, my pid is = %d\n", getpid());
            sleep(9);
            printf("------------parent going to die------------\n");
    } else {
        perror("fork");
        return 1;
    }

    return 0;
}

- 僵尸进程

僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。
【zoom .c】
特别注意,僵尸进程是不能使用kill命令清除掉的。因为kill命令只是用来终止进程的,而僵尸进程已经终止。为什么会导致僵尸进程呢?
僵尸进程导致原因:
子进程先于父进程退出,退出原因保存在PCB中,操作系统检测到进程退出后,通过父进程进行回收,但是此时父进程可能没有关注到我们子进程已经退出了,这时候操作系统不会随意的去释放我们的子进程资源,此时我们的子进程已经退出,但是我们的资源却没有被回收。此时我们的子进程就是一个Z(将死态)也就是我们称为 的僵尸进程
一下代码就是产生了僵尸进程


#include <stdio.h>
#include <unistd.h>
int main(){

    pid_t pid = fork();
    if(pid == 0){
        printf("i am child\n");
        sleep(3);
        printf("i die\n");
    }else{
        while(1){
        printf("i am father\n");
        sleep(5);
        }
    }

}

产生的结果就是导致了僵尸进程。
在这里插入图片描述所以在进程中我们应该去避免产生僵尸进程,如果过多的产生了僵尸进程,我们的资源泄漏严重,达到了进程数量的上限之后我们就不能再创建新的进程。
解决方案:

  • 使用wait相关函数去回收子进程
  • 杀死父进程
  • 使用信号SIGCHLD来释放我们的子进程资源
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程中产生僵尸和孤儿 的相关文章

  • 数字签名算法RSA

    RSA RSA数字签名算法源于RSA公钥密码算法的思想 xff0c 将RSA公钥密码算法按照数字签名的方式运用 RSA数字签名算法是迄今为止应用最为广泛的数字签名算法 RSA数字签名算法的实现如RSA加密算法一致 RSA数字签名算法主要可分
  • AXI接口协议详解-AXI总线、接口、协议

    转自 xff1a https cloud tencent com developer article 1695010 AXI接口协议详解 AXI总线 接口 协议 AXI 总线 上面介绍了AMBA总线中的两种 xff0c 下面看下我们的主角
  • USB主机是如何检测到设备的插入的呢?

    转自 xff1a https www cnblogs com wangh0802PositiveANDupward archive 2013 05 06 3061241 html USB设备的插入检测机制 首先 xff0c 在USB集线器的
  • 电路图中的那些类似于箭头的是什么意思?

    这个双箭头在画图软件中称为 off connect xff0c 作用是连接一个工程中的两张原理图里网络标号相同的网络 即 xff1a 这张原理图中网络标号为 PCIE20 2 REFCLKP 网络 xff0c 与其他原理图中的网络标号为 P
  • linux的socket CAN驱动介绍

    https blog csdn net linyangspring article details 27186911 在linux中 xff0c CAN总线的驱动有两种实现方式 xff1a 字符设备以及socket can驱动 Socket
  • 一文讲透Linux网络设备驱动框架及编写步骤

    https blog 51cto com u 14592069 5785977 本文阐述了网络架构模型 xff0c 特别是Linux系统中网络子设备框架4层结构 xff0c 反别阐述了各层的作用 重点讲解了sk buff及net devic
  • linux下的项目管理工具make和git的使用

    在linux下我们不能向在windows下这样去快速的进行编译 xff0c 在以前我们都是使用一个命令一个命令地去将 c文件生成程序 xff0c 在这里我们介绍项目自动化辅助构建工具make以及项目版本管理工具git make make说白
  • list_for_each_entry()函数分析

    在Linux内核源码中 xff0c 经常要对链表进行操作 xff0c 其中一个很重要的宏是list for each entry xff1a span class token comment list for each entry iter
  • 电力系统谐波分析

    加粗样式 电力系统谐波分析 一 实验目的 1 了解电力系统谐波信号的特点及分析方法 xff1b 2 综合利用数字信号处理技术实现对电力系统谐波信号的分析 xff1b 3 使学生进一步巩固数字滤波器的基本概念 理论 分析方法和实现方法 xff
  • 电力系统谐波分析代码

    程序清单 xff08 1 xff09 模拟谐波的信号的波形及频谱 fs 61 3000 采样频率 N1 61 256 采样点数 N2 61 1024 n1 61 0 N1 1 t 61 n1 fs x1 61 sin 2 pi t 50 4
  • range() 函数用法

    range 函数可创建一个整数列表 xff0c 一般用在 for 循环中 函数语法 xff1a range start stop step 参数说明 xff1a start 计数从 start 开始 默认是从 0 开始 例如range xf
  • set()函数用法

    python内置函数 文章目录 python内置函数描述set 语法返回值 实例 描述 set xff08 xff09 是集合的一种 set 函数创建一个无序不重复元素集 xff0c 可进行关系测试 xff0c 删除重复数据 xff0c 还
  • pop()函数的用法

    pop 函数用于移除列表中的一个元素 xff08 默认最后一个元素 xff09 xff0c 并且返回该元素的值 语法 xff1a list pop obj 61 list 1 默认为 index 61 1 xff0c 删除最后一个列表值 o
  • python assert()函数

    1 断言函数作用 断言函数是对表达式布尔值的判断 xff0c 要求表达式计算值必须为真 可用于自动调试 如果表达式为假 xff0c 触发异常 xff1b 如果表达式为真 xff0c 不会报错 2 使用assert判断数组是否相等 np ar
  • torch.nn 实现上采样——nn.Upsample

    CLASS torch nn Upsample span class token punctuation span size span class token operator 61 span None span class token a
  • ubuntu用命令行清空回收站的方法

    1 打开Trash span class token builtin class name cd span local share Trash 2 查看Trash里的文件 span class token function ls span
  • ubuntu命令行重启

    重启命令 xff1a 法一 xff1a span class token function reboot span 法二 xff1a span class token function shutdown span r now span cl
  • Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp

    今天我们简单的介绍一些linux下面的一些重要文件夹的重用 proc 是个虚拟文件系统 也就是 重新引导后修改会被重新初始化 提供了进程信息 内存资源 硬件设备 内核内存等信息 比如 xff1a 网卡 xff1a proc sys vm i
  • JVM中的堆和栈到底存储了什么?

    以下文章来自 xff1a https www jianshu com p 8a89fb6d839c xff0c 这篇文章涉及多方面知识 xff0c 所以我在有些地方插入了一些更加深入的文章 xff08 方法和函数区别 指针变量 修改引用的值

随机推荐

  • Qt中基于鼠标事件获取界面上坐标—鼠标点击,移动,释放

    Qt中基于鼠标事件获取界面上坐标 鼠标点击 移动 释放 以左上角为坐标原点显示全局像素坐标 以label控件左下角为坐标原点显示鼠标在控件上坐标 加入了像素与经纬度坐标同时显示 程序说明 以左上角为坐标原点显示全局像素坐标 Qt中默认左上角
  • ubuntu下研华工控机CAN卡驱动的安装与测试

    ubuntu下研华工控机CAN卡驱动的安装 0 关于ubuntu系统与内核版本是否需要匹配的问题 1 CAN卡驱动安装 PCI 1680 advSocketCAN V1 0 0 0 2 CAN卡通讯测试 2 1 引脚介绍 2 2 测试程序
  • PCL点云库必备知识点2.1——点云旋转变化pcl::transformPointCloud的使用

    matrix transform02 cpp span class token macro property span class token directive hash span span class token directive k
  • ros必备知识点8:ros之use_sim_time的使用

    这个参数当回放bag数据集是设置为true xff0c 此时说明系统使用的是仿真时间 xff0c 如果设置为false xff0c 则系统使用walltime 此参数可以通过launch文件中设置 xff0c 或者通过节点设置 launch
  • Apollo第二讲—apollo自动驾驶调试及仿真实践

    1 自动驾驶开发流程 1 1 数据分析 使用DreamView调试工具 云实验操作指南 xff08 1 xff09 云实验1 xff1a 使用Dreamview播放离线数据包 Apollo调试工具 1 xff09 内容概述 2 xff09
  • Apollo第五讲——Apollo定位模块

    1 定位的作用 1 xff08 xff09 定位和地图是一对孪生兄弟 获取当前地理位置信息 xff0c 通常在地图中进行记录和表示 提供车辆当前运动状态 xff1a 航向 速度 加速度 角速度等状态信息 xff08 2 xff09 地位的地
  • Apollo专项课——第一讲:交通灯检测

    1 问题引入与本节课重点学习打卡内容 2 Apollo决策功能的设计与实现 交规决策 xff1a 根据路径与红绿灯状态来决定是否生成虚拟墙 路径决策 路径边界 速度决策 planning模块运行流程 场景分类的例子 xff1a 车道跟随 x
  • Apollo最新升级后的感知框架介绍

    Apollo感知框架 1 Apollo视觉感知算法模块流程2 感知框架升级的内容 1 Apollo视觉感知算法模块流程 预处理 神经网络模型的训练 后处理 2 感知框架升级的内容 主要包括三方面 xff0c 如下所示 xff1a xff08
  • 采用u版的pytorchyolo3源码训练自己的数据集

    采用u版的pytorchyolo3源码训练自己的数据集 1 说明 最近一直在研究目标检测这一块的内容 在导师的建议下学习了yolov3目标检测算法 xff0c 想着既然学完了就要跑一边看看是啥样子的说干就干 本文采用的源码为https gi
  • 进程概念初始

    进程初识 进程 xff1a 进程对于用户来说进程就是一个运行中的程序 xff0c 就是一个编译好的二进制文件 站在我们程序员的角度上来看 xff0c 进程就是一些列指令运行的过程 xff0c 站到操作系统上来看 xff0c 就是分配系统资源
  • 常用的linux操作指令

    关机 系统的关机 重启以及登出 shutdown h now 关闭系统 init 0 关闭系统 telinit 0 关闭系统 shutdown h hours minutes amp 按预定时间关闭系统 shutdown c 取消按预定时间
  • TX2安装ROS系统成功记录

    TX2安装ROS系统成功记录 前言一 确认安装的ROS版本二 安装步骤1 设置sources list2 设置密钥3 安装4 环境配置4 安装构建功能包的依赖 三 测试总结 前言 因导师项目 xff0c 需要将在电脑上开发的算法移植到TX2
  • 实现js程序在vscode控制台输出的方法(看完方便多了)

    当我们想要写一段js代码时 xff0c 我们可能会在vscode中新建一个html文件 xff0c 然后再script标签下去编写js代码 xff0c 完了之后我们想要看看js打印输出的效果 xff0c 还会通过浏览器的 F12 去查看输出
  • 总结C++中取成员函数地址的几种方法

    总结C 43 43 中取成员函数地址的几种方法 这里 我整理了4种C 43 43 中取成员函数地址的方法 第1 2 4种整理于网上的方法 第3种cdecl cast是我自己想到的 其中 第4种 汇编 的方法不能在VC6上编译通过 推荐使用第
  • 移动程序后出现Cannot resolve symbol AppCompatActivity等错误

    移动android studio 程序包到不同电脑后 xff0c 出现Cannot resolve symbol AppCompatActivity等错误 xff0c 网上有说没有包含lib包 import android support
  • Gradle sync failed: Could not GET gradle-3.0.0-beta4.pom

    在不电脑间移动android工程项目时出现Gradle sync fail Could not resolve com android tools build gradle 3 0 0 beta4 以为是android studio版本的问
  • undefined reference to `dlopen' 等dlfcn.h类问题的另一种错误解决

    linux下或者android下编程经常遇到dlopen dlclose等未定义函数 xff0c 其实 只要我们链接上dl库就可以解决这个问题 xff0c 在makefile 加上 ldl选项 xff0c 便可以解决这个问题 很多文章都讲
  • openwrt交叉编译libffi zlib libiconv gettext glib gstreamer

    libffi 如果你是直接从git托管源构建libffi xff0c 那么configure还不存在 首先运行 autogen sh 这将要求您安装autoconf xff0c automake和libtool 您可能想要告诉configu
  • Python中链表、栈、队列、二叉树的封装

    Python中链表 栈 队列 二叉树的封装 1 链表的封装2 栈的封装3 队列4 二叉树的封装 1 链表的封装 链表是一种物理存储单元上非连续 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结
  • 进程中产生僵尸和孤儿

    孤儿进程 父进程先于子进程结束 xff0c 则子进程成为孤儿进程 xff0c 子进程的父进程成为init进程 xff0c 称为init进程领养孤儿进程 孤儿进程其实对于操作系统来说是没有太大的危害 xff0c 在孤儿进程中父进程结束了之后