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

news2024/11/17 15:44:58

        对于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.coloradmin.cn/o/2174190.html

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

相关文章

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

计算机毕业论文及毕业设计题目,计算机专业大专本科学位毕业论文题目推荐大全集

目录 一 软件工程方向 二 网络安全方向 三 人工智能与机器学习方向 四 大数据方向 五 云计算与虚拟化方向 六 数据库与信息系统方向 计算机专业的毕业论文或毕业设计题目通常需要结合当前的技术趋势以及个人兴趣来确定。一个好的选题不仅能够体现学生的学术水平和技术能…

【行业报告】AI大模型对我国劳动力市场潜在影响研究报告(2024),附PDF下载!!

前言 9月13日,北京大学国家发展研究院联合智联招聘在中国国际服务贸易交易会上发布的《AI大模型对我国劳动力市场潜在影响研究:2024》(以下简称“报告”)显示,2024年上半年,招聘职位数同比增速前五的人工智…

【含文档】基于Springboot+Vue的高校自习室预约系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

git小乌龟

下载git小乌龟 官方地址 Download – TortoiseGit – Windows Shell Interface to Git git小乌龟下载 选择自己对应的版本进行下载 安装完成后我们会发现是英文,这对我们这些英语不好的很不友好,所以就需要下载语言包 下载对应语言包 安装完成后我们…

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

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

HTML5--裸体回顾

免责声明:本文仅做分享~ 详情请参考以下: HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术,更是梦想! --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 (一般用左边的&#xff…

2024年10月CISAW课程安排

信息安全保障人员(CISAW)各方向的第一阶段和第二阶段培训本月将以线上线下模式开展 CISAW根据专业领域分为多个类别,如安全集成、安全运维、风险评估、应急服务、软件安全开发等,通过培训后可获得全国通用的信息安全保障人员认证证…

Linux驱动编程——根文件系统

一 、续上节 TFTP为简单文件传输协议,底层基于UDP。 ★1、arm上电后两种方式启动原理 (1)Nor flash可直接寻址,前面在使用2440时,均使用的是Nor flash; pc指令开始为0,上电后先指向地址为0的…

240929-DCGAN生成漫画头像

240929-DCGAN生成漫画头像 DCGAN是GAN的直接扩展,简单从命名来理解,DCGAN(Deep Convolutional Generative Adversarial Networks)就是比GAN(Generative Adversarial Networks)多了DC(Deep Conv…

《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测

《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测 哈喽小伙伴们好,我是Stark-C~ 截止目前,《黑神话:悟空》已经面世一个多月,不知道还有多少天命人没有通关呢? 作为国内首款真正意义上的3A大作,《黑神话…

SSD在低地球轨道卫星应用中的挑战

随着太空技术的迅速发展,越来越多的卫星被发射到低地球轨道(Low-Earth-Orbit,缩写LEO,又称“近地轨道”),以支持通信、地球观测、技术开发等多种任务。然而,这些卫星在轨道运行期间面临着严峻的…

国庆头像制作小程序相关代码

↓↓ 点击下方搜索开始制作您的专属头像 ↓↓ 发现-》搜一搜-》最美易飞证件照制作 国庆头像自定义头像制作、微信头像直接获取制作小程序源码 index.wxml文件代码 // pages/userPhoto/userPhoto.js//获取应用实例const app getApp()import { Router} from ../../utils/ro…

Transformer 算法模型详解

核心点:完整讲解Transformer模型! 让我们用简单的语言来解释:想象一下,你正在阅读一本书,书中的每个字都很重要。但如果你每次只能关注一个字,理解整本书就会变得很慢。而Transformer模型就像是赋予你超能…

机器学习-SVM

线性感知机分类 支持向量机 线性感知机(Perceptron) 感知机是线性二值分类器。 注意:什么是线性?线性分割面就是,就是在分割面中,任意两个的连线也在分割面中,这个分割面,就是线…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 文…

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景: 在系统开发过程中,数据导出为 Excel 格式是一个常见的需求。然而,由于各个开发人员的编码习惯和实现方式不同,导致导出代码风格不一。有的人使用第三方库,有的人则自定义实现。这种多样化不仅影响了代码的一致性…

Electron 安装以及搭建一个工程

安装Node.js 在使用Electron进行开发之前,需要安装 Node.js。 官方建议使用最新的LTS版本。 检查 Node.js 是否正确安装: # 查看node版本 node -v # 查看npm版本 npm -v注意 开发者需要在开发环境安装 Node.js 才能编写 Electron 项目,但是…

Vue之axios请求

Vue之axios请求 axios请求, 是Vue前端框架非常重要的一部分, 今天我们就讲解axios请求, 到底有什么作用, 以及会告诉大家axios的常见用法。 axios请求, 是网页向后端发起请求, 后端吧数据给我们网页, 这是一个前后端交互的过程。当我们学会了axios, 我们可以实现前端和后端练…

如何评估婚恋交友小程序的投资回报率

在这个数字化的时代,越来越多的人选择通过手机应用程序寻找自己的另一半。随着婚恋交友小程序的兴起,编辑h17711347205如何评估这类产品的投资回报率(ROI)成为了投资者和运营者关注的重点。本文将探讨如何有效地评估婚恋交友小程序…