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

news2024/9/29 21:48:37

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

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

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


一个小插曲~

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

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


僵尸进程

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

定义与特征

  • 定义
  • 僵尸进程是指子进程已经结束运行,但父进程还未对其进行善后处理(如调用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.c
	gcc -o $@ $^ -std=c99
.PHONY:clean
clean:
	rm -f code

#include <stdio.h>
#include <unistd.h>
#include <string.h>

// code -opt1/-opt2/-opt3
 int 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.coloradmin.cn/o/2177903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 查看Inspectors组件时严重掉帧

遇到一个问题&#xff0c;就是运行一个脚本的时候&#xff0c;只要我查看它的Inspectors&#xff0c;就会严重掉帧。 原本是30fps&#xff0c;只要查看这个组件&#xff0c;就掉到5fps。 这还真有点像波粒二象性&#xff0c;一观察就会掉帧&#xff0c;不观察就正常。 using…

【Ubuntu】minicom安装、配置、使用以及退出

目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具&#xff0c;以root权限登录系统&#xff0c;可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面&#xff1a; sudo minicon -s 进入配置界面后&#xff0c;…

Html2OpenXml:HTML转化为OpenXml的.Net库,轻松实现Html转为Word。

推荐一个开源库&#xff0c;轻松实现HTML转化为OpenXml。 01 项目简介 Html2OpenXml 是一个开源.Net库&#xff0c;旨在将简单或复杂的HTML内容转换为OpenXml组件。 该项目始于2009年&#xff0c;最初是为了将用户评论转换为Word文档而设计的 随着时间的推移&#xff0c;Ht…

人工智能技术在电磁场与微波技术专业的应用

在人工智能与计算电磁学的融合背景下&#xff0c;电磁学的研究和应用正在经历一场革命。计算电磁 学是研究电磁场和电磁波在不同介质中的传播、散射和辐射等问题的学科&#xff0c;它在通信、雷达、无 线能量传输等领域具有广泛的应用。随着人工智能技术的发展&#xff0c;这一…

清美项目 vue总结

vue绑定表单验证 <el-form ref"classform" :model"classform" :rules"classRules" label-width"80px"><el-form-item label"转入班级" prop"classId"><el-select v-model"classform.classId&…

HTML流光爱心

文章目录 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…

剩余电流继电器在轨道交通地铁车站的应用

0应用背景 城市轨道交通设备复杂、量大、分布广&#xff0c;在长期持续运行的过程中&#xff0c;存在潜在的火灾风险隐患。在国内外发生的地铁火灾事件中&#xff0c;电气原因引发的火灾占比最高&#xff0c;高达37%&#xff0c;其中&#xff0c;漏电流是重要因素。地铁车站电…

【网络】手动部署内网穿透(超详细教程)

一、环境搭建 本篇文章讲的是 服务器frp转发数据的方式 frp 下载&#xff1a;https://github.com/fatedier/frp/releases/tag/v0.58.1 如果无法访问githup&#xff0c;在如下连接下载一个加速器 Watt Toolkit 官网&#xff1a;https://steampp.net/ 下载完成以后&#xff0…

京东商品详情数据接口功能介绍?API接口介绍

京东商品详情数据接口是京东开放平台提供的一组应用程序编程接口&#xff08;API&#xff09;&#xff0c;允许开发者通过编程方式获取京东商城上特定商品的详细信息。这些接口为商家、第三方开发者以及消费者提供了丰富的数据支持&#xff0c;有助于提升电商平台的运营效率、用…

ODA(Open Design Alliance)试用小记-ODA提供源码下载就完全可控了吗?

1.概述 ODA(Open Design Alliance)库架构如下&#xff1a; 产品体系如下&#xff1a; ODA的产品体系越来越壮大&#xff0c;包括主流BIM格式SDK、Viewer、Cloud、数据交换等&#xff0c;每个模块需要单独购买&#xff0c;并提供“源码服务”。 2.是否可控&#xff1f; 值得…

Tensorflow2.0

Tensorflow2.0 有深度学习基础的建议直接看class3 class1 介绍 人工智能3学派 行为主义:基于控制论&#xff0c;构建感知-动作控制系统。(控制论&#xff0c;如平衡、行走、避障等自适应控制系统) 符号主义:基于算数逻辑表达式&#xff0c;求解问题时先把问题描述为表达式…

机器学习周报(9.23-9.29)

文章目录 摘要Abstract1 自监督学习&#xff08;Self-Supervised Learning&#xff09;1.1 BERT1.1.1 Masking Input1.1.2 Next Sentence Prediction1.1.3 BERT的使用方式 1.2 Why does BERT work?1.3 Multi-lingual BERT 2 pytorch中tensor相关函数学习使用2.1 张量拼接与拆分…

【Linux】磁盘分区挂载网络配置进程【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 目录 一、磁盘分区挂载 1、磁盘分区机制 2、增加磁盘应用实例 3、磁盘情况查询 4、磁盘实用指令 二、网络配置 1、NAT网络原理图 2、网络配置指令 3、网络配置实例 4、主机名和host…

二、初步编写drf API

2.1基于django #settings.py urlpatterns [path(admin/, admin.site.urls),path(auth,views.auth) #创建一个路由 ]#views.py from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt# Create your views here.c…

一条sql在MySQL中是怎么执行的

目录 一、MySQL总体架构二、各层的作用1、连接层2、应用层3、存储引擎层 一、MySQL总体架构 作为常问八股文&#xff0c;相信不少小伙伴当年都被问到过这个问题&#xff0c;回答这个问题我们首先得知道MySQL服务器基本架构&#xff0c;主要分为连接层&#xff0c;应用层和存储…

【PyTorch】循环神经网络

循环神经网络是什么 Recurrent Neural Networks RNN&#xff1a;循环神经网络 处理不定长输入的模型常用于NLP及时间序列任务&#xff08;输入数据具有前后关系&#xff09; RNN网络结构 参考资料 Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs Und…

古代帝王与啤酒的不解之缘

在历史的长河中&#xff0c;古代帝王们的生活总是充满神秘与传奇。他们掌握着无上的权力&#xff0c;享受着世间的荣华富贵。而在这些帝王的日常生活中&#xff0c;有一种饮品始终伴随着他们&#xff0c;那便是精酿啤酒。今天&#xff0c;我们就来探寻古代帝王与啤酒之间的不解…

渗透测试实战—教育攻防演练信息收集

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

【Python】数据可视化之热力图

热力图&#xff08;Heatmap&#xff09;是一种通过颜色深浅来展示数据分布、密度和强度等信息的可视化图表。它通过对色块着色来反映数据特征&#xff0c;使用户能够直观地理解数据模式&#xff0c;发现规律&#xff0c;并作出决策。 目录 基本原理 sns.heatmap 代码实现 基…

「OC」探索 KVC 的基础与应用

「OC」KVC的初步学习 文章目录 「OC」KVC的初步学习前言介绍KVC的相关方法key和keyPath的区别KVC的工作原理KVO的setValue:forKey原理KVO的ValueforKey原理 在集合之中KVC的用法1. mutableArrayValueForKey: 和 mutableArrayValueForKeyPath:2. mutableSetValueForKey: 和 muta…