[Linux]僵尸进程,孤儿进程,环境变量

希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!


一个小插曲~

严肃的问题,猫猫和花花可以兼得吗?

答案是不可以,猫猫吃了花花,会嘎掉!


僵尸进程

僵尸进程是操作系统中一个常见的概念,具体指已经终止但仍然占用系统资源的进程。僵尸进程的形成主要是由于父进程在子进程终止后没有正确处理子进程的退出状态。以下是对僵尸进程的详细解析:

定义与特征

  • 定义
  • 僵尸进程是指子进程已经结束运行,但父进程还未对其进行善后处理(如调用wait()或waitpid()函数)的状态。此时,子进程的进程描述符(PCB)仍然保留在系统中,占用一定的内存空间。
  • 特征
  • 僵尸进程不再消耗CPU资源,但它们的进程描述符(PCB)仍然存在于系统中,这意味着它们会占用一定的内存资源。如果系统中存在大量的僵尸进程,可能会导致系统资源的浪费和性能下降。

产生原因

僵尸进程的产生通常是因为父进程没有调用wait()或waitpid()等函数来清理子进程的状态。当子进程结束时,它会发送一个SIGCHLD信号给父进程,通知父进程它已经结束。如果父进程没有处理这个信号或者没有调用wait()系列函数来清理子进程的状态,子进程就会变成僵尸进程。


解决方法

为了解决僵尸进程问题,可以采取以下几种方法:

  1. 使用wait()或waitpid()系统调用:父进程可以通过调用wait()或waitpid()函数来获取子进程的退出状态,并清理子进程所占用的资源。
  2. 忽略SIGCHLD信号:父进程可以使用signal()函数将SIGCHLD信号的处理函数设置为SIG_IGN,表示忽略该信号。这样,在子进程终止后,内核会自动回收子进程的资源,不会产生僵尸进程。
  3. 使用双向管道进行进程间通信:父进程可以创建一个双向管道,子进程在终止时通过管道发送一个消息给父进程。父进程在接收到消息后调用wait()或waitpid()来处理子进程的终止状态。
  4. 监控和清理僵尸进程:可以使用系统命令(如ps、grep等)来查找僵尸进程,并通过杀死其父进程来间接清理僵尸进程。但请注意,直接杀死僵尸进程是不可能的,因为它们已经处于死亡状态。

注意事项

  • 僵尸进程本身不能被直接杀死,因为它们已经死亡,但是它们的状态信息仍然保留在系统中。
  • 如果系统中出现大量僵尸进程,可能需要检查系统上的程序是否存在问题,或者是否存在某些服务或进程管理不当的情况。
  • 频繁地出现僵尸进程可能表明系统或应用程序中存在问题,需要进一步的调查和修复。


孤儿进程

孤儿进程是操作系统中的一个概念,具体指的是在其父进程执行完成或被终止后仍继续运行的一类进程。这些孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。


产生原因

在类UNIX操作系统中,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个父进程由于正常完成工作而退出或由于其他情况被终止,而它的一个或多个子进程却还在运行,那么这些仍在运行的子进程就会成为孤儿进程。


处理机制

为避免孤儿进程退出时无法释放所占用的资源而僵死,进程号为1的init进程会接受这些孤儿进程,这一过程也被称为“收养”(英语:re-parenting)。init进程会循环地调用wait()函数来等待其已经退出的子进程,包括这些被收养的孤儿进程。当孤儿进程结束时,init进程会负责清理它们的状态和资源,确保系统资源的有效回收。


特点与影响

  • 无父进程:孤儿进程是没有父进程的进程,它们的父进程ID会被设置为1,即init进程的ID。
  • 资源回收:由于init进程的存在,孤儿进程在结束时能够确保其占用的资源得到回收,因此孤儿进程本身并不会对系统造成危害。
  • 常见现象:在Unix/Linux系统中,孤儿进程是正常现象,系统能够自动处理它们的状态和资源回收问题。


环境变量

Linux环境变量是操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内设置的一大批全局变量。以下是关于Linux环境变量的详细解析:

一、环境变量的分类

Linux环境变量可以按照不同的标准进行分类,主要包括以下几种:

  1. 按照生命周期分类
    • 临时环境变量:用户利用export命令在当前终端下声明环境变量,关闭Shell终端后失效。
    • 永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
  2. 按照作用域分类
    • 系统环境变量:对所有用户和进程都可见,通常在系统启动时被设置,并被所有用户和进程共享。
    • 用户环境变量:每个用户独立设置,只对该用户及其相关进程可见。这些变量可以在登录时通过不同的配置文件(如.bashrc、.bash_profile、.profile等)设置。
    • 进程环境变量:由特定进程设置,并且仅对该进程及其子进程可见。

二、常见的环境变量

Linux系统中有很多常用的环境变量,它们各自承担着不同的作用,以下是一些常见的环境变量:

  • PATH:决定了shell将到哪些目录中寻找命令或程序。它是一系列由冒号分隔的目录,当输入一个命令时,shell会按照PATH中定义的顺序去这些目录中查找可执行文件。
  • HOME:当前用户主目录的路径。
  • USER:当前用户的用户名。
  • SHELL:当前用户默认使用的shell类型。
  • LANG:指定系统的默认语言。
  • LD_LIBRARY_PATH:指定系统在哪些目录中查找共享库文件。
  • TERM:指定当前终端的类型。
  • PS1:定义命令行提示符的格式。

三、查看环境变量

在Linux中,可以使用多种方法来查看环境变量:

  • echo命令:例如,echo $PATH可以查看PATH环境变量的值。
  • printenv命令:列出所有环境变量及其对应的值。
  • env命令:与printenv类似,也是用于显示所有环境变量。
  • set命令:显示当前shell的本地定义的环境变量和局部变量。

四、添加和删除环境变量

添加环境变量
  1. 临时添加
    • 使用export命令在当前终端下声明环境变量,例如export PATH=$PATH:/new/path。这种方法只对当前终端有效,关闭终端后失效。
  2. 永久添加
    • 编辑用户的个人配置文件(如.bashrc、.bash_profile、.profile等),在其中添加export命令,然后保存并退出。之后,可以通过执行source ~/.bashrc(或相应的配置文件)来使更改立即生效,或者在下次登录时自动生效。
删除环境变量
  1. 临时删除
    • 使用unset命令,例如unset PATH(这会删除整个PATH环境变量,通常不推荐这样做),或者更精细地删除PATH中的某个特定路径(这需要使用一些字符串处理技巧)。
  2. 永久删除
    • 编辑相应的配置文件,删除或注释掉相应的export命令,然后保存并退出。之后,通过执行source命令或重新登录来使更改生效。

五、环境变量的作用

环境变量在系统当中通常具有全局属性,可以被子进程继承。它们对于系统的正常运行和程序的执行起着至关重要的作用。通过合理设置环境变量,可以方便地控制程序的运行环境,提高系统的灵活性和可配置性。


六、环境变量的加载顺序

在Linux系统中,环境变量的加载顺序通常遵循以下规则(可能因发行版而异):

  1. /etc/environment(如果存在):这是系统级的环境变量配置文件,对所有用户都有效。
  2. /etc/profile:这是系统级的全局配置文件,对所有用户都有效。它会调用其他配置文件,如/etc/bash.bashrc等。
  3. ~/.bash_profile、~/.bash_login、~/.profile(按此顺序查找):这些是用户级的配置文件,用于设置用户个性化的环境变量。bash shell会按照顺序查找这些文件,并执行找到的第一个文件。
  4. ~/.bashrc:这是bash shell特有的配置文件,用于设置bash shell的特定配置和环境变量。每次打开新的bash shell时,该文件都会被执行。

code:code.cgcc -o $@ $^ -std=c99
.PHONY:clean
clean:rm -f code

#include <stdio.h>
#include <unistd.h>
#include <string.h>// code -opt1/-opt2/-opt3int main(int argc, char *argv[], char *env[]){printf("我是一个进程,我的pid: %d\n", getpid());for(int i=0; env[i]; i++){printf("env[%d]: %s\n", i, env[i]);}if(argc != 2){printf("Usage: code opt\n");return 1;}if(strcmp(argv[1], "-opt1") == 0){printf("功能1\n");}else if(strcmp(argv[1], "-opt2") == 0){printf("功能2\n");}else if(strcmp(argv[1], "-opt3") == 0){printf("功能3\n");}else{printf("默认功能\n");}
return 0;
}

希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435458.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ string的基本运用详细解剖

string的基本操作 一.与C语言中字符串的区别二.标准库中的string三.string中常用接口的介绍1.string中常用的构造函数2.string类对象的容量操作函数3.string类对象的访问及遍历操作4.string类对象的修改操作5.string类的非成员函数6.string中的其他一些操作 一.与C语言中字符串…

软考论文《论大数据处理架构及其应用》精选试读

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…

《Windows PE》3.2 PE头结构-DOS头和DOS块

正如我们在初识PE文件一节中看到的&#xff0c;PE文件头中包含几个重要的结构&#xff0c;DOS头、DOS块&#xff08;DOS Stub&#xff09;和NT头。NT头就是PE特征码文件头&#xff08;COFF 文件标头&#xff09;扩展头&#xff08;可选标头&#xff09;&#xff0c;合称为NT头。…

Anki 学习日记 - 卡片模版 - 单选ABCD(纯操作)

摘要&#xff1a;在不懂前端语言的情况下自定义卡片模版&#xff0c;卡片模版的字段 安装&#xff08;官网&#xff09;&#xff1a;Anki - powerful, intelligent flashcards (ankiweb.net) 一、在哪能修改卡片模版 管理笔记模板 - > 添加 -> 问答题 -> 设置名称 二…

建筑物变化检测算法baseline工程,开箱即用,23年5月测试准确度超越阿里云aiearth

建筑物变化检测算法baseline工程&#xff0c;开箱即用&#xff0c;23年5月测试准确度超越阿里云aiearth 建筑物变化检测算法Baseline工程 项目背景 随着城市化进程的加快&#xff0c;对建筑物的变化进行监测变得尤为重要。这不仅有助于城市管理与规划&#xff0c;还能够为灾害…

Flutter路由

路由作为一种页面切换的能力&#xff0c;非常重要。Flutter 中路由管理有几个重要的点。 Navigator 1.0&#xff1a;Flutter 早期路由系统&#xff0c;侧重于移动端 &#xff0c;命令式编程风格&#xff0c;使用 Navigator.push() 和 Navigator.pop() 等方法来管理路由栈。 N…

多处理器的概念与对比

SISD, SIMD, MISD, 和 MIMD 代表了并行计算的四种基本架构&#xff0c;它们描述了处理器如何处理指令和数据。 理解这些架构的关键在于区分指令流&#xff08;Instruction Stream&#xff09;和数据流&#xff08;Data Stream&#xff09;是单一的还是多重的。 1. SISD (Singl…

04 B-树

目录 常见的搜索结构B-树概念B-树的插入分析B-树的插入实现B树和B*树B-树的应用 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O( l o g 2 N log_2N log2​N)二分搜索树无要求O(N)二叉平衡树无要求O( l o g 2 N log_2N log2​N)哈希无要求O(1) 以…

彩虹易支付最新版源码及安装教程(修复BUG+新增加订单投诉功能)

该系统也没版本号&#xff0c;此版本目前是比较新的版本&#xff0c;增加了订单投诉功能&#xff0c;和一个好看的二次元模板。 此版本是全开源版&#xff0c;无一处加密文件,系统默认是安装后是打不开的&#xff0c; 本站特别修复了BUG文件&#xff0c;在PHP7.4环境下也没问…

ISA-95制造业中企业和控制系统的集成的国际标准-(2)

ISA-95 文章目录 ISA-95ISA-95企业层和制造运营管理层信息模型一、企业层和制造运营管理层信息模型内容二、企业层和制造运营管理层信息模型分类 ISA-95企业层和制造运营管理层信息模型 ISA-95信息模型是指ISA-95制造业中企业和控制系统集成的国际标准定义了企业层和制造运营层…

二值图像的面积求取的两种MATLAB方法

一、引言 面积在数字图像处理中经常用到&#xff0c;在MATLAB中&#xff0c;计算二值图像的面积通常可以通过两种主要方法实现&#xff1a;遍历法和直接利用bwarea函数。下面将分别介绍这两种方法的原理和相应的MATLAB代码示例。 二、遍历法计算二值图像面积的原理和MATLAB代码…

Stable Diffusion绘画 | 来训练属于自己的模型:素材处理与打标篇

纵观整个模型训练流程&#xff0c;图片素材准备和打标环节占据的分量比重&#xff0c;绝对超过60%。 上一篇分享了图片素材准备&#xff0c;这一篇&#xff0c;开始对准备好的图片素材进行处理了。 素材处理 我已经收集了 霉霉 的25张图片&#xff1a; 但是&#xff0c;发现…

Goland 设置GOROOT报错 The selected directory is not a valid home for Go SDK

问题描述 将go版本从1.16升级到1.22时配置GoRoot报错了如下图问题 The selected directory is not a valid home for Go SDK起因的是我的这个goland比较老了&#xff0c;2020年的。所以需要设置下版本 解决 OK&#xff0c;说一下解决办法&#xff1a; 找到go的安装路径&am…

Linux之进程概念

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux专栏 创作时间 &#xff1a;2024年9月28日 基本概念&#xff1a; 进程说白了其实就是一个程序的执行实例&#xff0c;正在执行的程序。 在内核层面来说&#xff0c;就是一个担当分配资源&#xff08;CPU时间…

基于大数据可视化的图书推荐及数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Unity开发绘画板——02.创建项目

1.创建Unity工程 我们创建一个名为 DrawingBoard 的工程&#xff0c;然后先把必要的工程目录都创建一下&#xff1a; 主要包含了一下几个文件夹&#xff1a; Scripts &#xff1a;存放我们的代码文件 Scenes &#xff1a;工程默认会创建的&#xff0c;存放场景文件 Shaders &…

8621 二分查找

**思路&#xff1a;** 1. 读取输入的元素个数 n。 2. 读取有序数组 ST。 3. 读取要查找的关键字 key。 4. 使用折半查找法&#xff08;即二分查找&#xff09;在数组 ST 中查找 key 的位置。 5. 如果找到 key&#xff0c;输出其位置&#xff1b;如果未找到&#xff0c;输出 &qu…

[Linux]:线程(二)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 与Windows环境不同&#xff0c;我们在linux环境下需要通过指令进行各操作&…

自然语言处理实战项目:从基础到实战

自然语言处理实战项目&#xff1a;从基础到实战 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能的重要分支&#xff0c;致力于让计算机能够理解、生成和处理人类语言。NLP 在搜索引擎、智能客服、语音助手等场景中扮演着关键角色。本文将带…

使用python进行自然语言处理的示例

程序功能 分词&#xff1a;将输入句子拆分为单词。 词性标注&#xff1a;为每个单词标注其词性。 命名实体识别&#xff1a;识别命名实体&#xff08;如人名、地名、组织等&#xff09;。 这段代码展示了如何用 nltk 进行基础的 NLP 任务&#xff0c;包括分词、词性标注和命名…