笔记整理—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在同一时间只能干一件事,但这个事情是极短的,所以在宏观上可看作并行,现代操作系统最小调度单位是线程而不是进程。

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

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

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

相关文章

数据结构——计数、桶、基数排序

目录 引言 计数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 桶排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 基数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 排序算法的稳定性 1.稳定性的概念 2.各个排序算法的稳定性 结束语 引…

NVLM多模态 LLM 在图像和语言任务中的表现优于 GPT-4o

论文地址:https://arxiv.org/pdf/2409.11402 背景 传统的多模态 LLM 有两种主要方法:纯解码器架构(如 LLaVA)和基于交叉注意力的架构(如 Flamingo)。混合架构,既提高了训练效率,又增…

[CKA]CKA的购买和注册考试券

CKA的购买和注册考试券 一、购买CKA 1、注册 LF开源软件学园 账号 LF开源软件学园:https://training.linuxfoundation.cn/register 2、个人中心进行实名认证 3、按需求进行购买 4、在考试中心–我的订单 中查看购买的订单 我是在"黑色星期五"打折买的…

LLM大模型书籍:专补大模型短板的RAG入门与实战书来了!

文末赠书 RAG自2020年由Facebook AI Research推出后,一下子就窜红了。 毕竟,它是真的帮了大忙,在解决大语言模型的“幻觉”问题上起到了关键作用。 如今,Google、AWS、IBM、微软、NVIDIA等科技巨头都在支持RAG应用的开发。微软…

中国新媒体联盟与中运律师事务所 建立战略合作伙伴关系

2024年9月27日,中国新媒体联盟与中运律师事务所举行战略合作协议签字仪式。中国新媒体联盟主任兼中国社会新闻网主编、中法新闻法制网运营中心主任左新发,中运律师事务所高级顾问刘学伟代表双方单位签字。 中国新媒体联盟是由央视微电影中文频道联合多家…

你的下一台手机会是眼镜吗?RTE 大会与你一同寻找下一代计算平台丨「空间计算和新硬件」论坛报名

周四 Meta 刚公布新一代 AR 眼镜 Orion 后,Perplexity 的 CEO 发了一条状态:「如果你还在做软件,请转型硬件。」 一家估值 30 亿美元的 AI 软件公司 CEO 说出这样的言论,既有有见到「最强 AR 眼镜」Orion 后的激动情绪&#xff0c…

如何组织一场考试并筛选未参加答题的考生?

🙋频繁有小伙伴咨询:我组织了一场答题活动,导出考试成绩时只有参加了答题的人,但我想要找到哪些人没答题 此前我们会建议小伙伴逐人排查,但这建议被反复吐槽🤦 确实,如果只有十几个人逐人排查还…

鸿蒙开发(NEXT/API 12)【硬件(Pen Kit)】手写笔服务

Pen Kit(手写笔服务)是华为提供的一套手写套件,提供笔刷效果、笔迹编辑、报点预测、一笔成形和全局取色的功能。手写笔服务可以为产品带来优质手写体验,为您创造更多的手写应用场景。 目前Pen Kit提供了四种能力:手写…

银行大模型,走到哪了?

频道说 透过近期披露的上市银行中报,窥探银行业大模型最新进展。 大模型浪潮依然汹涌澎湃。 9月12日,OpenAI全新发布o1模型,在复杂推理任务取得重大进步,代表了人工智能能力的新水平,被视为AI时代的又一个里程碑。 …

Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)

Bigemap Pro是一款功能强大的计算机数据要素辅助设计(Computer-Aided Data Elements Design CADED)软件,由成都比格图数据处理有限公司研发设计,主要应用在数据要素设计领域,为各行业提供安全可靠高效易用的数据要素设计类国产化基础软件。Bi…

公交换乘C++

题目: 样例解释: 样例#1: 第一条记录,在第 3 分钟花费 10 元乘坐地铁。 第二条记录,在第 46 分钟乘坐公交车,可以使用第一条记录中乘坐地铁获得的优惠票,因此没有花费。 第三条记录,…

OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码) 现看看demo演示。 本文将介绍如何使用Streamlit和OpenCV…

【GUI设计】基于Matlab的图像去噪GUI系统(8),matlab实现

博主简介: 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作,可联系主页个人简介提供的联系方式或者文末的二维码。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像去噪GUI系统&am…

Android界面控件概述

节选自《Android应用开发项目式教程》,机械工业出版社,2024年7月出版 做最简单的安卓入门教程,手把手视频、代码、答疑全配齐 控件是Android界面的重要组成单元,Android应用主要通过控件与用户交互,Android提供了非常…

PPT 快捷键使用、技巧

前言: 本文操作是以office 2021为基础的,仅供参考;不同版本office 的 ppt 快捷键 以及对应功能会有差异,需要实践出真知。 shift 移动 水平/垂直 移动 ; shift 放大/缩小 等比例放大 缩小 ; 正圆 正…

AOP-代理实现

三种代理实现 1 JDK动态代理实现-基于接口代理 2 CGLIB动态代理实现-基于类代理 3 AspectJ 适配实现 为什么Proxy.newProxyInstance 会生成新的字节码? 创建代理类: Proxy.newProxyInstance 首先会检查缓存中是否有已存在的代理类字节码。 如果没有&…

Pencils Protocol 即将登录各大 CEX,依旧看好 $DAPP

近期,Scroll生态头部DeFi协议Pencils Protocol迎来了系列重磅市场进展。自9月18日开始,$DAPP通证分别在Tonkensoft、Bounce以及Coresky等平台陆续开启了IDO,并且在短期内售罄。同时在通证售卖完成后,DAPP 通证又在9月27日陆续登录…

​极狐阿尔法 S5安全至上,北汽极狐打造移动防护堡垒

在新能源汽车的广阔舞台上,北汽极狐以其卓越的品质和创新的技术,不断书写着辉煌篇章。其中,极狐阿尔法 S5更是以其强大的性能、豪华的配置和亲民的价格,成为了众多消费者关注的焦点。 北汽极狐的品质追求 北汽极狐一直以来都将品…

Mysql建表遇到重复的列名

调用接口拿到的数据rows,有很多行,每一行又有很多key-value pair,一开始代码是遍历第一行,每一对key-value,key作为建表时的列名,value的类型决定了该列在mysql中的类型 之后出现问题,表能建&am…