笔记整理—linux进程部分(1)进程终止函数注册、进程环境、进程虚拟地址

        对于mian()函数而言,执行前也需要先执行一段引导代码才会去执行main()函数,该部分的代码包含构建c语言的运行环境等配置,如清理bss段等。

        在使用gcc去编译程序的时候,使用gcc -v xxx.c可见链接过程。在编译完成后可见xxx.out文件。

        当运行一个程序时,加载器将程序需要的程序加载内存中运行(编译时用到的是连接器,运行时用到的是加载器)。argc与argv的参数输入就在这个部分实现;加载器->引导代码->mian()。

        程序结束,正常结束使用return、exit、_exit等。

        非正常结束程序是通过自己或它程序发送信号实现程序终止如ctrl+c(linux而言)。

        atexit()向系统注册进程终止处理函数。

int atexit(void (*func)(void))
void func1(void)
{
    printf("func1\n");
}

int mian(void)
{
    printf(......);//①
    atexit(func1);//②
    printf(......);//③
    return 0;
}

        执行顺序为①->③->②打印func1。当多个atexit函数注册时,先注册的后执行幕后注册的先执行。其原因是atexit是用一个栈去存储这些注册的函数指针的。

        return和exit的效果其实是一样的,但_exit(0)不会去执行atexit注册的函数。return和exit就类似于回调函数,但_exit(0)是内核直接终止了进程,不会对现场进行清理和打扫。(回调函数,作为参数传递给另一个函数,在被调用函数执行完成后再执行)。

       

        进程环境

        环境变量,环境就是周围的东西,可用拿来使用。使用echo $PATH打印当前PATH,使用export打印所有的环境变量.所以进程所在环境变量存在进程环境表中。

        当前进程中可以直接使用环境变量表中的变量environ。

extern char **environ//本质是一个字符串数组
int i=0;
while(NULL!=environ[i])
{
    printf(。。。。。。,environ[i]);
    i++;
}

        char *getenv(const char *name);查找环境变量。

        int setenv(const char *name, const char *value, int overwrite);设置环境变量。

        clearenv()清理环境变量。

        等等

        进程运行的虚拟地址空间,让每个进程运行在独立的虚拟空间,认为整个内存只有自己一个在运行,但实际上是独立分时使用。

        虚拟空间,说给你,但实际不给你,毕竟程序不是自己就开始原地运行的,只有在用到的时候才会给你用到的内存大小。

        意义,实现内存隔离提高安全性,多进程同时运行时,当链接地址==运行地址时,程序运行虚拟地址映射,所在的地址从0开始,程序不用关系真实的物理地址是多少。这就是gcc编译时不用提供链接地址的原因。

 

        进程,进程是一个动态的过程不是静态的实际物质,静态->在硬盘里;动态->在RAM内存里。内进程控制块PCB,核中有专门用于管理进程控制的数据结构。

        进程ID,是PCB中的一个元素,用于标识唯一表示进程的区分,使用ps -aux打印进程信息,PID 1是内核->用户态进程。

getpid()//得到自己的pid
getppid()//得到父进程pid
getuid()//得到当前进程用户ai
getgid()//得到当前组id

        进程PID结束后,id不会复用,所以开机pid数字2w以上是正常的。getpid()本质是从pcb中读取的。

        多进程调度原理,操作系统要求多进程同时运行,否则不干活;本质上是宏观的并行,围观的串行,单核cpu在同一时间只能干一件事,但这个事情是极短的,所以在宏观上可看作并行,现代操作系统最小调度单位是线程而不是进程。

        调度器,依照进程所需时间,级别,情况等进行调度安排时间分配。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

动态规划算法:12.简单多状态 dp 问题_打家劫舍_C++

目录 题目链接:LCR 089. 打家劫舍 - 力扣(LeetCode) 一、题目解析 题目: 解析: 二、算法原理 1、状态表示 状态表示: 2、状态转移方程 状态转移方程推理: 3、初始化 dp表初始化: 特殊…

【优选算法】(第七篇)

目录 ⽔果成篮(medium) 题目解析 讲解算法原理 编写代码 找到字符串中所有字⺟异位词(medium) 题目解析 讲解算法原理 编写代码 ⽔果成篮(medium) 题目解析 1.题目链接:. - 力扣&#…

神经网络(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络:单层感知机1.3两层神经网络:多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

连锁店收银系统如何选择?

在新零售背景下,连锁店的收银系统扮演着至关重要的角色。随着科技的不断发展和消费者需求的不断变化,一款功能齐全的收银系统不仅可以提高便利店的运营效率,还可以提供更好的消费体验。以下是连锁店收银系统必备的功能。 1.收银系统能支持独…

Mac制作Linux操作系统启动盘

前期准备 一个 Mac 电脑 一个 U 盘(8GB 以上) 下载好 Linux 系统镜像(iso 文件) 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘,打开终端输入下面的命令查看 U 盘是否已经 m…

python单例和工厂模式

设计模式 设计模式是一种编程套路,可以极大的方便程序的开发 最常见、最经典的设计模式,就是学习的面向对象 除了面向对象之外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模式: 单例、工厂模式建造者…

IDEA2020运行项目时不从配置的maven仓库找jar包,从C盘默认路径下找jar包

目录 问题描述: 解决方案: 问题描述: 使用IDEA2020做java开发,idea的设置中maven仓库地址配在D盘, maven的配置文件setting.xml中的仓库也已经确认配置到D盘, 项目根据pom文件自动下载jar包时也会下载到…

IDEA 系列产品 下载

准备工作 下载 下载链接:https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境: 操作系统:windows10 产品:IntelliJ IDEA 版本:2024.1.2 注意:如果需要其他产品或者版本可以自行下载&#xff0…

【算法系列-数组】移除元素 (双指针)

【算法系列-数组】移除元素 (双指针) 文章目录 【算法系列-数组】移除元素 (双指针)1. 算法分析🛸2. 删除有序数组中的重复性(LeetCode 26)2.1 解题思路🎯2.2 解题过程🎬2.3 代码举例🌰 3. 移动零(LeetCode 283)3.1 解题思路&…

黑马智数Day4-1

新增月卡 配置路由完成跳转 {path: /cardAdd,component: () > import(/views/car/car-card/add-card) }<el-button type"primary" click"$router.push(/cardAdd)">添加月卡</el-button> 车辆信息表单验证 <el-form :model"carInf…

【移植】一种快速移植OpenHarmony Linux内核的方法

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开…

接档《凡人修仙传》的《牧神记》动画,能否成为黑马?

堪称B站国创半边天的《凡人修仙传》第三季将在10月19日迎来完结&#xff0c;接档它的是由玄机科技制作&#xff0c;改编自宅猪同名网络小说的《牧神记》。这部将于10月27日播出的“玄机娘娘新崽”&#xff0c;能否成功接下《凡人修仙传》的好彩头&#xff0c;成为国漫界下一匹黑…

LeetCode[中等] 78.子集

给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 思路 迭代法 每次遍历nums中的新的数&#xff0c;将其加到之前所有得到的set中&#xff0c…

【第十六章:Sentosa_DSML社区版-机器学习之生存分析】

【第十六章&#xff1a;Sentosa_DSML社区版-机器学习之生存分析】 16.1 加速失效时间回归 1.算子介绍 加速失效时间回归模型Accelerated failure time (AFT)是一个监督型参数化的回归模型&#xff0c;它可以处理删失数据。它描述了一个生存时间的对数模型&#xff0c;所以它通…

深度解读 2024 Gartner DevOps 魔力象限

上周 Gartner 刚发布了 2024 年度的 DevOps 魔力象限。我们也第一时间来深度解读一下这份行业里最权威的报告。 和2023年对比 23 年入围 14 家厂商&#xff0c;24 年入围 11 家。4 家厂商从报告中消失&#xff0c;分别是 Bitrise, Codefresh, Google Cloud Platform (GCP), VM…

SpringBoot集成Redis及SpringCache缓存管理

1.集成Redis 1.导入依赖 <!--spirngboot springdata对redis支持--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.配置信息 #数据源配置…

服务器端请求伪造(SSRF)漏洞解析

免责申明 本文仅是用于学习检测自己搭建的靶场环境有关SSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法规内…

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

3-1.Android Fragment 之创建 Fragment

Fragment Fragment 可以视为 Activity 的一个片段&#xff0c;它具有自己的生命周期和接收事件的能力&#xff0c;它有以下特点 Fragment 依赖于 Activity&#xff0c;不能独立存在&#xff0c;Fragment 的生命周期受 Activity 的生命周期影响 Fragment 将 Activity 的 UI 和…

信安 实验1 用Wireshark分析典型TCP/IP体系中的协议

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验1 用Wireshark分析典型TCP/IP体系中的协议 实验目的 通过Wireshark软件分析典型网络协议数据包&a…