当前位置: 首页 > news >正文

Linux 僵尸进程和孤儿进程, 进程优先级

僵尸进程

之间在进程状态中了解到了 "僵尸状态".
那么处于僵尸状态的进程就是僵尸进程.

僵尸状态是一种特殊的进程状态, 它表示一个进程已经完成执行, 但其父进程尚未回收其终止状态.

"僵尸状态" 的本质就是死亡状态.

如何理解僵尸进程:
举个例子: 一个正常的人突然死亡了, 我们并不会直接将人送入火葬场, 而是要确认这个人的死亡原因.这个人的死因是什么, 自杀, 意外, 还是他杀. 我们需要进行调查. 进程也是如此, 当一个进程死亡后, 我们也需要知道, 进程的死因 (任务已完成, 程序出现错误 ...). 在原因未查明之前, 这个 "尸体" 会被保留. 此时就处于僵尸状态.

创建一个进程就是为了完成任务, 现在进程结束了, 那么任务完成的怎么样, 还需要通过一些信息来了解.

int main()
{// return 1;return 0;
}

在 C/C++ 程序结束时, 一般都会有一个返回值. 这个返回值就是一种信息, 可以用来表示任务完成的怎么样.

如: 返回 0, 表示程序正常执行结束, 返回 1 表示出现了错误.

所以在父进程还没有接收到这个返回信息时, 子进程就会一直处于僵尸状态, 这样就形成了僵尸进程.

当一个进程结束时, 进程的结束信息会被保留在这个进程的 PCB 中,

进程的代码和数据等资源都会被回收, 但 PCB 不hi立即释放,

直到 父进程 读取了 PCB 中的结束信息之后, PCB 才会被释放.

当一个进程长期处于 Z 状态, 没有被及时回收, 那么就有内存泄漏的风险.

#include <stdio.h>
#include <unistd.h>
int main()
{int id=fork();    if(id==0)    {    sleep(1);    printf("child: %d\n", getpid());exit(2);    }    if(id>0)    {    printf("parent: %d\n", getpid());while(1)    {}    }    return 0;  
}

可以观察到, PID 为 2180110 的进程的父进程是, PID = 2180109.
我们看到了子进程已经退出了, 父进程一直在运行, 但没有接收子进程退出信息.
所以子进程一直处于 Z "僵尸状态".

孤儿进程

顾名思义, 就是这个进程没有了自己的父进程.

当一个子进程的父进程, 在子进程推出之前, 先一步退出了, 那么这个子进程就变成了 "孤儿进程".

当一个进程没有父进程, 那么也就没有进程会为它收尸 (读取PCB中的退出信息), 那么就会造成僵尸进程, 如果长期不回收资源, 就会一直暂用操作系统的资源, 最终就有可能导致内存不足, 操作系统崩溃.

为了避免孤儿进程退出后, 一直处于僵尸状态,

操作系统会为这个孤儿进程安排一个 "义父",

当这个孤儿进程结束后, 就由这个义父来回收

可以看到, 这个孤儿进程被安排的义父就是 PID = 1 的进程.
PID = 1 的这个进程就是操作系统本身.

进程优先级

进程优先级: 是一个用于确定进程执行顺序的数值, 它影响进程获得 CPU 时间片的频率.

使用命令查看进程优先级:

ps -l 或者 ps -al

需要关注的值有两个

  1. PRI: 进程优先级标识符, 这个值越小, 进程优先级就越高
  2. NI: 优先级的修正数 (nice 值)

在 Linux 中, 进程的默认优先级都是80,

进程优先级的取值返回: 60 ~ 99,

进程优先级 PRI = 80 - NI.

使用 ps 打印出来的 PRI = 80 - NI.
即: ps 命令打印出来的 PRI 是经过计算后得到的实际的 PRI.

进程优先级一般是不会去随意修改的.

操作系统调度进程时, 需要较为均衡的让每个进程都得到调度.

如果随意的修改进程的优先级, 就有可能导致, 某个进程调度次数变多,

而某个进程优先级太低, 迟迟得不到调度.

这样就会造成 "进程饥饿"

相关文章:

Linux 僵尸进程和孤儿进程, 进程优先级

僵尸进程 之间在进程状态中了解到了 "僵尸状态". 那么处于僵尸状态的进程就是僵尸进程. 僵尸状态是一种特殊的进程状态, 它表示一个进程已经完成执行, 但其父进程尚未回收其终止状态. "僵尸状态" 的本质就是死亡状态. 如何理解僵尸进程: 举个例子: 一个正…...

爬虫笔记24——纷玩岛自动抢票脚本笔记

纷玩岛自动抢票&#xff0c;协议抢票思路实现 一、获取Authorization凭证二、几个关键的参数三、几个关键的接口获取参数v&#xff0c;这个参数其实可以写死&#xff0c;可忽略通过价位获取演出的参数信息获取观演人信息&#xff0c;账号提前录入即可提交订单接口 先看实现图&a…...

《白帽子讲Web安全》15-16章

《白帽子讲Web安全》15-16章 《白帽子讲Web安全》15章15、Web Server配置安全15.1、Apache安全15.2、Nginx安全15.3、jBoss远程命令执行15.4、Tomcat远程命令执行15.5、HTTP Parameter Pollution15.6、小结 第四篇 互联网公司运营安全《白帽子讲Web安全》16章16、互联网业务安全…...

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

大语言模型压缩技术;推理优化技术;SparseGPT算法;GPTQ算法

目录 大语言模型落地的成本、效率与效果 模型压缩技术 推理优化技术 SparseGPT算法 GPTQ算法 大语言模型落地的成本、效率与效果 模型压缩技术 模型压缩技术是大语言模型轻量化的关键。介绍了多种模型压缩方法,其中权重量化和模型稀疏化是两种主要的技术。 权重量化:权重…...

Facebook的开源项目解析:推动开发者社区的技术进步

Facebook&#xff0c;作为全球领先的社交平台之一&#xff0c;其在技术领域的创新不仅体现在产品功能的实现上&#xff0c;也积极推动开源社区的发展。开源项目已经成为Facebook技术战略的重要组成部分&#xff0c;通过开源&#xff0c;Facebook不仅加速了技术进步&#xff0c;…...

力扣--LCR 149.彩灯装饰记录I

题目 代码 /** Definition for a binary tree node. public class TreeNode { int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right ri…...

Rust SQLx CLI 同步迁移数据库

上文我们介绍了SQLx及SQLite&#xff0c;并介绍了如何使用代码同步迁移数据库。本文介绍Sqlx cli 命令行工具&#xff0c;介绍如何安装、使用&#xff0c;利用其提供的命令实现数据表同步迁移。Java生态中有flyway, sqlx cli 功能类似&#xff0c;利用命令行工具可以和其他语言…...

批量生成不同用户的pdf 文件(html样式)

技术 selenium thymeleaf itextpdf chromedriver 使用thymeleaf 将动态数据替换 使用selenium chromedriver 进行js &#xff0c;css等逻辑运算后渲染视图 使用itextpdf 将html 转为pdf 文件 html模板 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf…...

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 &#xff08;必须要混淆开了之后才才可以设置为true&#xff09; proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…...

排序算法2

排序算法1-CSDN博客 排序算法1中提及的是较为基础(暴力实现&#xff0c;复杂度较高)的排序算法&#xff0c;不适合于数据量较大的场景&#xff0c;比如序列长度达到1e5 接下来以蓝桥另一道题目来理解其它的排序算法 蓝桥3226 蓝桥账户中心 样例 5 1 5 9 3 7 4、快速排序 快速排…...

【Web开发基础学习——corsheaders 应用的理解】

Web开发基础学习系列文章目录 第一章 基础知识学习之corsheaders 应用的理解 文章目录 Web开发基础学习系列文章目录前言一、使用1.1 安装1.2 配置 二、功能总结 前言 corsheaders 是一个 Django 第三方应用&#xff0c;用于处理跨域资源共享 (CORS)。CORS 是一种机制&#x…...

Redis和MySQL之间如何进行数据同步

原因 为什么要进行Redis和MySQL的数据同步&#xff1f; 性能优化&#xff1a;MySQL是关系型数据库&#xff0c;数据读取和存储相对复杂&#xff1b;Redis是内存数据库&#xff0c;读写速度极快&#xff0c;将热点数据存在Redis&#xff0c;可以大大提高系统的访问速度。 数据…...

css:转换

转换 移动 /* transform: translate(100px, 200px); */transform: translateX(100px);transform: translateY(100px); /*一个意思*/ 如果后面跟百分数的意思是移动盒子自身x/y方向长度的百分比&#xff0c;可以用作子绝父相控制盒子水平居中垂直居中 translate里的xy值是相对…...

状态管理与存储:Vuex 和 sessionStorage

1. sessionStorage 存储位置 sessionStorage 是浏览器提供的 Web Storage API 的一部分&#xff0c;用于在一个会话期间存储数据。数据保存在浏览器的 内存 中&#xff0c;而不是在硬盘上&#xff0c;且其生命周期仅限于当前浏览器标签页。数据在浏览器窗口或标签页关闭时会被…...

Redis和MySQL保持一致性的延迟双删(Delay Double Delete)策略

Redis和MySQL保持一致性的延迟双删&#xff08;Delay Double Delete&#xff09;策略&#xff0c;是一种在数据更新或删除时为了保证数据一致性而采取的方法。以下是延迟双删的过程和原理的详细解释&#xff1a; 一、过程 第一次删除缓存&#xff1a; 当需要更新数据库中的数据…...

快速理解微服务中Fegin的概念

一.由来 1.在传统的架构里面&#xff0c;我们是通过使用RestTemplate来访问其他的服务&#xff0c;但是这种方式就存在了一个很大的缺陷&#xff0c;也就是被调用方如果发生了服务的迁移(IP和端口发生了变化)&#xff0c;那么调用方也需要同步的在代码里面进行修改&#xff0c;…...

新增工作台模块,任务中心支持一键重跑,MeterSphere开源持续测试工具v3.5版本发布

2024年11月28日&#xff0c;MeterSphere开源持续测试工具正式发布v3.5版本。 在这一版本中&#xff0c;MeterSphere新增工作台模块&#xff0c;工作台可以统一汇总系统数据&#xff0c;提升测试数据的可视化程度并增强对数据的分析能力&#xff0c;为管理者提供测试工作的全局…...

快速搭建一个博客!!!“Halo框架深度优化:搭建你的个性化博客或网站”

目录 引言&#xff1a; 一. 首先服务器上去下载一个docker 1.可以参考官方地址&#xff1a; 2. 通过宝塔来一键安装&#xff01;&#xff01;&#xff01; 3.也可以自己下载&#xff01;&#xff01;&#xff01; 1.卸载旧版 2.配置Docker的yum库 3.安装Docker 4.启动和…...

009 STM32 HAL库介绍

STM32 HAL库&#xff08;Hardware Abstraction Layer&#xff09;是STMicroelectronics为STM32系列微控制器提供的一套硬件抽象层库&#xff0c;它旨在简化STM32的开发过程&#xff0c;提高代码的可移植性和可维护性。HAL库通过提供一组统一的API接口&#xff0c;使得开发者无需…...

告别理论!在Spartan-6上玩转DDR3:从MIG IP核配置到UCF约束文件修改的完整避坑指南

Spartan-6 FPGA DDR3实战&#xff1a;从MIG配置到硬件调试的全链路解析 当你在ISE中点击"Generate"按钮完成MIG IP核配置时&#xff0c;真正的挑战才刚刚开始。这份指南将带你穿越从IP核生成到稳定运行的完整链路&#xff0c;特别聚焦那些官方文档语焉不详、网络教程…...

C#上位机开发入门:手把手教你用PowerPMAC SDK实现第一个通讯Demo

C#上位机开发入门&#xff1a;从零构建PowerPMAC通讯Demo的实战指南 引言 当你第一次打开PowerPMAC开发套件时&#xff0c;面对密密麻麻的库文件和数百页的技术手册&#xff0c;是否感到无从下手&#xff1f;作为工业自动化领域的核心控制器&#xff0c;PowerPMAC与上位机的通讯…...

VMware解锁macOS完整指南:3步免费运行苹果系统

VMware解锁macOS完整指南&#xff1a;3步免费运行苹果系统 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 你是否渴望在Windows或Linux电脑上体验macOS的魅力&#xff1f;无论你是开发者需要测试iOS应用…...

英雄联盟Akari助手:从新手到高手的智能游戏伴侣完整指南

英雄联盟Akari助手&#xff1a;从新手到高手的智能游戏伴侣完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟中繁琐的操…...

别再死记硬背了!Vivado伪双口RAM的wea/ena信号,这次用仿真波形给你讲透

深入解析Vivado伪双口RAM控制信号&#xff1a;从波形图看wea/ena关键设计 在FPGA开发中&#xff0c;存储器设计一直是性能优化的关键环节。Xilinx Vivado工具链提供的伪双口RAM IP核因其灵活性和高效性&#xff0c;成为许多高速数据处理系统的首选方案。然而&#xff0c;不少开…...

别再手动算字模了!用Python+STM32CubeMX快速生成8*8点阵动画,效率提升10倍

用PythonSTM32CubeMX自动化生成8*8点阵动画&#xff1a;从手动编码到智能设计的跨越 每次看到那些闪烁的8*8点阵动画&#xff0c;你是否想过背后的开发者要花多少时间手动计算每个像素的十六进制值&#xff1f;传统开发流程中&#xff0c;工程师需要先在纸上绘制图案&#xff0…...

45.什么是内联条件表达式(inline conditional expressions)?在事件处理里怎么用?

内联条件表达式指的是&#xff1a;你在 JSX 里直接用 JavaScript 条件语法&#xff08;如三元 ? :、逻辑与 &&、逻辑或 ||&#xff09;来决定事件处理函数是否执行、执行哪段逻辑&#xff0c;或给事件处理器提供一个默认值。它能让事件行为跟 props/state 动态绑定&am…...

ElevenLabs企业客户成功路径图:从POC验证到年度千万级合同签署的5个不可跳过的合规锚点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs企业客户成功路径图&#xff1a;从POC验证到年度千万级合同签署的5个不可跳过的合规锚点 企业在采用ElevenLabs语音合成平台构建AI客服、无障碍内容生成或本地化语音交付系统时&#xff0c;技…...

如何三步免费下载百度文库文档:简单实用的完整指南

如何三步免费下载百度文库文档&#xff1a;简单实用的完整指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 百度文库助手是一个让你免费获取文库文档的开源工具&#xff0c;通过智能清理页面元…...

实战指南:如何用FanControl彻底解决显卡风扇异常与NvApiWrapper兼容性问题

实战指南&#xff1a;如何用FanControl彻底解决显卡风扇异常与NvApiWrapper兼容性问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com…...