Linux相关概念和易错知识点(8)(操作系统、进程属性)

【AI大模型:前沿】46、AI+无人机:智能飞行革命全景指南——从技术突破到行业应用与未来趋势 AI+无人机的融合不仅是技术迭代,更是“空间生产力”的革命——它将人类活动范围从地面拓展至低空,重构物流、农业、应急等行业的生产方式。当前,技术突破(如多模态感知、群体智能)与法规松绑(超视距飞行许可)正加速产业化,预计2030年全球低空经济市场规模将突破万亿美元。技术层:轻量化AI模型、边缘-云端协同、安全冗余系统;应用层:垂直领域解决方案(如电网AI巡检、精准农业);生态层:无人机巢建设、空管系统、数据服务平台。 阅读详情

目录

1.操作系统(OS)

(1)基本结构的认识

(2)OS软硬件资源管理的理解

(3)OS的结构和软硬件管理方式

①用户调用接口

②系统调用接口(System Call)

③Kernel

④驱动程序

(4)OS如何控制软硬件资源?先描述,再组织

①硬件层面

②软件层面

③控制软硬件资源带来的启发-----数据结构、面向对象的思想

2.进程

(1)进程的概念和组成

(2)并行处理和并发处理

(3)调度顺序

(4)查看进程

(5)/proc内存文件


1.操作系统(OS)

(1)基本结构的认识

任何计算机系统都包含一个基本的程序集合,用于实现计算机最基本最底层的操作,这个软件称为操作系统。操作系统大部分使用C语言编写,少量使用汇编语言。

从较大的层面来看,操作系统分为内核(Kernel)和外部程序。内核主要进行进程/任务/线程管理,文件系统管理,内存管理、驱动程序管理;外部程序包括Shell(通常指的是命令行界面CLI)、图形化界面(GUI)、glibc、系统调用的库、预装软件等。

我们要理解:我们平时用图形化界面操作Windows实际上是在GUI的运行基础上进行的,同样,使用Linux的命令行窗口也是在CLI这个程序运行的基础上进行的,我们都是在外部程序里进行的操作

(2)OS软硬件资源管理的理解

操作系统的定位就是控制和管理计算机上软硬件资源,让计算机的使用成本降低,能够走进家家户户。在软件层面,有编译器对语言进行翻译;在硬件层面,有文件系统对磁盘数据进行管理,而操作系统则是夹在软硬件之间的软件,起到沟通、协调作用。总的来说,操作系统对软硬件资源高效且安全地管理,是一种以给用户提供更好的使用体验为目的的手段(以人为本)。

(3)OS的结构和软硬件管理方式

①用户调用接口

我们日常使用的软件都是在这个层面上的,包括图形化界面、命令行。像安卓也是以Linux为底层,在用户调用接口上建立起来的

②系统调用接口(System Call)

对于操作系统而言,它不相信任何人,因为如果它相信用户,自己就危险了,因此它规定用户只能通过操作系统对外提供的接口来进行调用,同时,它也不允许用户跳过它直接向硬件访问。

尽管规定了只能通过接口来访问系统,但是这些接口同样复杂,因此系统调用接口上面还建立了我们日常接触到的软件(用户调用接口),当我们执行操作时,由软件来帮我们调用系统对应的接口,如printf就是通过库来调用对应接口,最后将数据输出到内存文件中。

当我们涉及到任何软硬件沟通时,都需要借助系统调用接口来调用内核。如当我们执行简单数学运算时,运算本身只会占用CPU资源,但运算程序的进程是在内存创建的,因此同样需要调用系统调用接口。

系统调用接口是C语言写的,这就意味着我们凡事要调用系统接口,必须使用C语言。进一步讲,所有编程语言、程序的底层,只要涉及系统接口调用,通通是C语言,包括我们熟知的Java、Python、Rust等

③Kernel

操作系统内核就像是一个管家,向下买菜做饭打扫清洁,向上询问主人的需求。在很多如银行、派出所、医院等也都能见到类似的影子,即用户通过对外开放的窗口提出自己的需求,一层一层向下传递,紧凑有序地完成任务。

④驱动程序

底层硬件都是采用冯诺依曼结构集成在主板上的,能够直接或间接被CPU控制器控制,每一种硬件都要有自己的驱动程序(操作系统自带或需要自己安装),驱动程序不可或缺,因为不同硬件功能不同,实现不同,迭代速度快,如果让操作系统直接访问硬件,那就要频繁修改操作系统和硬件之间的交互方式。为了避免操作系统频繁修改,在操作系统和硬件上做一层抽象,同样以接口形式进行访问,使得开发成本降低。

(4)OS如何控制软硬件资源?先描述,再组织

①硬件层面

Kernel中有大量C语言的数据结构,其中能描述对象的就是结构体。针对不同的硬件,Kernel会在其开辟的内存中存储描述硬件信息的结构体(Linux中一般是struct device),并且将这些结构体通过一定数据结构联系起来(如链表,构成device_list)。这些结构体里面存有硬件基本信息,以及调用驱动程序接口的操作方法。当要和硬件沟通时,Kernel就直接通过struct device调用驱动程序接口,进而和硬件沟通。我们发现,Kernel对硬件的管理转变为对device_list、struct device的管理

②软件层面

由冯诺依曼体系结构出发可以得到,当有程序开始运行时,在SSD(或HDD)中的数据就会被拷贝一份至DRAM中,内存中存储的就是硬盘代码和数据的备份。不仅如此,拷贝的数据还需要进行管理,因为可能同时有多份文件被拷贝进内存。因此,在计算机启动时,DRAM为Kernel分配一定大小的内存中,就有一部分空间是用于描述数据的结构体,称为PCB(进程管理块,PCB是总称,Linux中是struct task_struct)。

PCB底层就是结构体,其功能和前面说的struct device一样,是用于描述载入内存的代码数据的详细信息的。并且这些PCB也以某种数据结构联系在一起,Kernel通过管理这个数据结构,就能够间接管理程序的运行,这也涉及到进程的概念了。

③控制软硬件资源带来的启发-----数据结构、面向对象的思想

通过上面对软硬件管理的方法可以看出,要实现对某对象的管理,需要先对要管理的对象进行描述,将它们的信息和调用方式提取出来放一起,同时不同对象之间用某种结构联系起来(数据结构),进而实现对这些对象的管理(面向对象的思想OOP,体现了管理的本质是对数据和属性的管理)。

OS管理软硬件的资源的核心思想是先描述,再组织。面向对象的思想提供了描述的方法,一系列数据结构提供了组织的方法。这也是C++、Java这种面向对象编程语言出现并在当今作为主流的原因。因为几乎所有的程序逻辑都可以用先描述、再组织的思想来进行管理,而面向对象的语言拥有面向对象设计的类,也有一系列数据结构组成的库。很符合管理对象的条件。

包括生活中,上层对我们的管理也是面向对象的思想,他们不需要和我们见面,他们只需要拿到我们的描述信息,一天里干了什么没干什么,再通过传话就可以实现对我们的管理。

2.进程

(1)进程的概念和组成

运行起来的程序就叫进程(进行中的程序),进程是操作系统管理软件的相关概念,是操作系统调度的实体。

当我们启动一个程序时,操作系统首先向硬盘访问,读取程序相关的代码和数据到DRAM中,这相当于冯诺依曼结构中输入设备 -> 存储器的步骤。但是只有代码和数据还不能管理它,还需要一个结构体来管理,Kernel中的PCB结构体就是完成这项工作的,将我们的代码和数据描述起来。每一项进程对应一个PCB、一块内存空间。换句话说,进程 = PCB(包含进程的属性) + 内存中的代码和数据。PCB通过某种数据结构联系起来(以链表为例,PCB_list),由Kernel管理。这样,操作系统对软件、对进程的管理就转换为对PCB_list管理(对进程属性的管理),这也体现出先描述、再组织的思想。

进程创建其实是先生成PCB,再加载代码,这样加载的代码才能够及时地被管理,可以节约时间。

注意只有操作系统生成了PCB并和代码数据联系起来后,才被操作系统认为是一个进程。

PCB开辟空间的操作是Kernel进行的,当操作系统启动时,DRAM最先为Kernel分配内存。

PCB是一类结构体的总称,在Linux中具体为struct task_struct

(2)并行处理和并发处理

当程序被操作系统管理起来后,就要解决如何执行的问题了。CPU有两种处理进程的方式,一种是并行处理,一种是并发处理。并行处理是将多个任务列表(struct runqueue = PCB组成的数据结构 + 其他属性)分配给多个CPU,同时并行处理。并发处理是指CPU执行进程代码时,会给每一个进程预分配一个时间片,CPU基于时间片进行轮转执行(非常快),每当执行时间达到时间片,不管有没有执行完都切换为下一个。

并行处理加快处理进程的速度,并发处理保证调度任务能较为公平地得到处理。这两种处理方式适用于绝大多数民用系统。但除此之外还有实时操作系统,这只在特殊领域使用。如车载操作系统就是实时操作系统,它不遵循公平处理的原则,必须要求汽车一旦发生紧急情况,操作系统一定要最高优先级处理紧急状况。

(3)调度顺序

这些任务列表会根据并行的处理方式交给CPU每个核心处理,CPU的每个核心都配有一个调度器,任务列表会先交给调度器,由调度器决策如何并发处理,适时将对应的PCB交给运算器进行处理。进程排队的本质是PCB在排队(进程的属性在排队),同样体现先描述、再组织的思想。

(4)查看进程

当我们创建一个进程时,操作系统会为这个进程分配唯一的pid,pid的生成用到了时间戳,因此不连续以及pid前后两次不同是正常的。

我们可以在代码中使用pid_t getpid()来查看运行代码的进程的pid,pid_t本质是int

当我们运行程序时,就能看到进程对应的pid了

我们还可以通过ps ajx | head -1 && ps ajx | grep (name)查看进程来验证

指令解读:

ps是显示进程的状态,一般需要搭配选项;ajx,a意味着所有进程,j意味着打印进程的pid和ppid等信息,x显示没有控制终端的进程,j可以替换为u,这时就会显示进程的用户、CPU使用率、内存使用率等。

但ps ajx获取到的信息太多了,我们将所有获取的信息通过管道,让head取第一行,也就是每一列的说明。&&意味着第二条指令,当我们想要在一行中执行多条指令时,需要使用&&或;

之后同理,将获取到的信息通过管道传给grep,grep的功能是筛选出所传信息中包含规定字符串的行,日常使用方式是grep (字符串,不能以符号开头) (文件路径)

如此我们就能筛选出我们想要看到的进程了

grep指令的执行本质也是一个进程,所以当我们筛选的时候,ps ajx | grep (name)作为一个指令也会将自己筛选出来,要避免这种情况,我们可以再使用一条管道,将含grep的行筛选出去,即grep -v grep

ps ajx | head -1 && ps ajx | grep (name) | grep -v grep指令执行结果是

(5)/proc内存文件

当进程被创建时,/proc目录下会创建内存文件(不存入磁盘,临时文件,随着进程的消亡而消亡),名字和进程的pid一致。进入这个目录,我们就能看到所有关于这个进程的信息。

ps的底层就是对/proc里面的信息做解读

其中有两个文件很特殊,一个是cwd,一个是exe

exe指向可执行程序的位置,实时监控进程启动的可执行文件的状态。cwd是指向可执行程序当前的工作目录。当我们在代码中有创建文件的行为,如果使用的是相对地址,那么程序运行起来后相对地址前面会拼上cwd构成绝对进程。

我们以下面的代码来进行验证

运行起来后在proc里面可以查看到cwd已经修改

因此最终生成的文件会在cwd目录下生成

当程序开始执行时,我们就可以删掉可执行程序,因为程序相关代码已经被加载到内存中了,此时exe就会检测到

【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新) ShaderGraph是Unity中的一个可视化工具,用于创建和编辑图形着色器。其意义在于简化编写复杂着色器的过程,减少对具体编程语言的依赖,使艺术家和设计师可以更方便地创建各种美术效果。使用ShaderGraph可以通过图形界面设置着色器属性,包括颜色、纹理、光照等,并在视窗预览中即时显示结果,从而快速迭代和调整着色器。使用ShaderGraph需要先安装Unity 2018.1或以上版本,并添加ShaderGraph插件。打开ShaderGraph面板后,可以通过拖放节点并连接它们来创建着色器。 阅读详情

相关推荐

避开STM32H7的‘保护陷阱’:从Option Byte机制深度解析读写保护原理与预防

本文深度解析STM32H723VGT6的Option Byte保护机制,详细讲解RDP读保护和WRP写保护的工作原理及配置方法,并提供硬件设计防御策略和软件预防性编程技巧,帮助开发者避免误触发保护机制导致芯片锁定的问题。

weixin_33686714的博客 441

汇编语言入门教程

2018-02-10阮一峰21CTO 学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。 计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的...

weixin_30808575的博客 1994

手把手教你搭建自己的 API 中转站

本文介绍了如何通过开源工具CLIProxyAPI(CPA)搭建本地AI模型代理服务,解决多工具切换、海外API访问困难等问题。CPA可将OpenAI、Gemini等不同服务的API统一封装,用户只需配置一次账号信息,所有客户端即可通过标准接口访问。文章详细讲解了CPA的下载安装、配置修改、账号导入及客户端连接方法,并强调其经济性、可控性和集中管理优势。通过自建中转站,用户可避免第三方服务的质量风险,实现多账号负载均衡,构建个人AI资源池。最后提供了网络配置等实用建议,帮助开发者高效使用AI编程工具。

DongJiYong_20的博客 1788

Linux相关概念和易错知识点(9)(父进程、子进程、进程状态)

(如杀毒软件,常驻内存进程),对于那些进程而言如果不及时释放数据,确实会一直增加内存占用,但那种一跑起来就退的进程有点内存泄漏其实不影响。进程的创建遵循树状结构,(时刻注意bash的本质是命令行解释器的进程,并且是因为它最早出现,所有进程都是在它的界面下启动的,因此才成为用户的父进程)这样整个进程都被阻塞了,如果是代码也不会继续执行了,因为CPU需要进程的PCB才能操作,而此时PCB在设备队列里。对于由系统父进程创建的子进程而言,Z状态基本上就是一瞬间的事,但对于我们自己创建的进程,情况就有些不一样了。

SGlow0708的博客 1746

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 681

.NET适配HarmonyOS进展 1. 前言

目前国产化系统浪潮下,适配鸿蒙是中国软件大势所趋,.NET作为最适合开发客户端语言之一,适配鸿蒙系统(HarmonyOS Next)是目前.NET开发者最关心的事情。我目前业余时间正在移植Avalonia到HarmonyOS,去年在.NET Conf CN上分享过,目前又取得一点进展,所以本文把所有问题进行整合与大家进行分享。

2301_76476890的博客 1461

【Linux操作系统】进程概念

本文系统性地介绍了计算机系统中的核心概念与运行机制。首先阐述了冯诺依曼体系结构的基本原理及其性价比优势,说明了CPU通过内存与外设交互的必要性。然后深入解析了操作系统的核心功能与管理逻辑,包括"先描述后组织"的管理思想、进程控制块(PCB)的作用以及进程状态转换。文章详细探讨了进程调度算法、优先级机制、环境变量管理,并重点剖析了虚拟地址空间的实现原理及其保护机制。最后通过代码实例验证了程序地址空间的布局特征,揭示了虚拟地址与物理地址的映射关系。全文从硬件架构到软件管理层层递进,构建了完整

2401_82610555的博客 3549

【yolov8】与yolov5的区别及改进详解

yolov8-----有点厉害的目标检测框架.

qq_44878985的博客 3万+

Linux相关概念和易错知识点(10)(进程优先级、进程切换)

在ir保存指令且eip更新完成之后,CPU就会执行ir里面的指令,之后ir再次导入eip指定位置的指令,eip更新,CPU处理,以此类推......此外,还有。进程是基于时间片来进行调度轮转的,当一个进程在时间片到的时候,不一定执行完了,但此时为了公平性它不能再执行了,CPU必须切换开始执行下一个进程的任务。优先级(建立在已经有权限的基础之上,就是谁先谁后的问题),权限(能还是不能的问题),没权限一定没有优先级的概念。进程的优先级竞争的是CPU资源。,包括NI的修改是有限的,也是基于这个原则来限制的。

SGlow0708的博客 1141

【20230415】Ubuntu22.04双屏显示触屏设置,解决触摸点和响应位置不一致的问题

双屏显示时,如果存在一个触摸屏,有可能会出现触摸点和响应位置不一致的问题。我的显示器配置如下:一个34寸,3440*1440;一个22英寸触摸屏,1920*1080。

Creationyang的博客 3214

【python数据挖掘课程】二十八.基于LDA和pyLDAvis的主题挖掘及可视化分析

这是《Python数据挖掘课程》系列文章,前面很多文章都讲解了数据挖掘、机器学习,这篇文章主要讲解LDA和pyLDAvis算法,同时讲解如何读取CSV文本内容进行主题挖掘及可视化展示。文章比较基础,希望对你有所帮助,提供些思路,也是自己教学的内容。推荐大家购买作者新书《Python网络数据爬取及分析从入门到精通(分析篇)》,如果文章中存在错误或不足之处,还请海涵。 目录: 一.显示结果及安装 二.LDA主题挖掘 三.pyLDAvis可视化分析 四.小结

杨秀璋的专栏 1万+

Linux相关概念和易错知识点(5)(权限的修改、时间属性)

4会减掉r,实际减掉r,所以这就是为什么54处理后没有区别,多出来的1本来就没有,会被抛弃。当合作时,由于拥有组和所属组只能由两个用户当,大部分人都会是other,要保证共享目录编辑还必须开放目录中other的w权限,这就会导致一些误删的情况出现。也就是说,002就是减掉other中和2对应的权限w,因此我们会发现最终权限表示中目录和文件的other都少了w权限。当我们使用chmod时,属性被修改了,但内容没有被修改,于是只有Change被修改, 而Modify不会被修改。在Linux中划分了三个组,

SGlow0708的博客 1084

KUKA机器人修改机器人名称和IP地址的具体方法示例

KUKA机器人修改机器人名称和IP地址的具体方法示例

Robot_PLC_HMI_Automation 5258

Linux相关概念和易错知识点(24)(认识信号、信号捕捉)

其中利用了回调函数的知识。其返回值是返回先前的handler的值,

SGlow0708的博客 781

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux下的进程概念相关知识点整理总结

目录1.认识冯诺依曼系统2.操作系统概念与定位3.深入理解进程概念,了解PCB4.学习进程状态,学会创建进程,掌握僵尸进程和孤儿进程,及其形成原因和危害5.了解进程调度, Linux进程优先级,理解进程竞争性与独立性,理解并行与并发6.理解环境变量,熟悉常见环境变量及相关指令, getenv/setenv函数7.理解C内存空间分配规律,了解进程内存映像和应用程序区别, 认识地址空间。8.选学Linux2.6 kernel, O(1)调度算法架构 1.认识冯诺依曼系统 2.操作系统概念与定位 3.深入理解进程

sakeww的博客 2796

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Linux相关概念和易错知识点(26)(命名管道、共享内存)

总的来说,key由用户层去设置更容易管理,但key怎么设置呢?理论上只要不冲突,就可以随便设。如果冲突,就会出错,需要手动改,如果我们不希望自己去设置,

SGlow0708的博客 1167

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux相关概念和易错知识点(13)(进程地址空间、页表、虚拟地址)

编译器、用户访问、进程管理,你能想到的一切操作,它们都只能拿着虚拟地址进行访问和操作,这些操作都会传到页表的手上,一切对物理空间的访问都需要页表来管理。我们new出来的堆区空间本质上也不是在开辟物理空间,而只是在进程地址空间里做文章,这个空间本质是虚拟的,最终是靠页表帮我们创建的物理空间。,且不同的系统、编译器存在不同程度的优化,因此我们要接受理论和实践上的差别。我们先来认识常见的划分方式。,也就意味着无论我们修改数据,实际指向的代码大概率是不会被拷贝的,就算被拷贝,只要内容不变,也不影响上述结论,同时。

SGlow0708的博客 1308

Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)

我们通过status可以得到退出相关信息,但是上图所示似乎不太对劲,每一次打印都是得到6144,而进程的退出码应该都是24才对。我们之前讲过当父进程退出而子进程还在工作时,子进程就会变成孤儿进程并被系统领养,孤儿进程会被自动移到后台运行。并且有的时候我们想要创造孤儿进程,不想让父进程一直等着一个相当长时间不会退出的子进程,父进程wait子进程除了避免僵尸或孤儿,还想要知道子进程任务完成的怎么样,也就是子进程的退出码。注意,如果这个父进程是系统相关的进程,我们就无需担心,它会自己wait。

SGlow0708的博客 1366

Linux相关概念和易错知识点(11)(进程调度、Linux内核链表)

比如假定bitmap[0]是5,根据101B,我们得到PCB* queue[140]的第0位和第2位有进程,其余30位都没有进程,可以直接跳过。当nr_active == 0时,active和expired的指针交换,这个时候我们就发现expired(原来的active)空了,active(原来的expired)满了。runqueue中active、expired、array[2]存在的意义很明确,没有它们就构不成整个调度的流转,上述的过程就是它们存在的意义。,链入规则和前面一样,都遵循哈希算法。

SGlow0708的博客 1360

Linux相关概念和易错知识点(20)(dentry、分区、挂载)

系统最开始就要加载根目录到内存中,创建dentry,后续的访问也都是根据根目录文件的内容来逐渐建立dentry多叉树的。当我们cd进入某一个目录里时,有可能我们根本没有进入对应的目录文件(目录文件真实存在),而实际上进入了一个分区,这是通过挂载点进行特殊实现的。我们的dentry讲解中存在一个巨大的漏洞,那就是文件的inode是以分区为界限的。,会按照ext2的格式结合我们文件的大小自动将分区分为不同的块,初始化超级块等操作。问题的根源来自分区的确定,我们只要确定了分区,上面的问题就都能解释了。

SGlow0708的博客 1273

Linux相关概念和易错知识点(25)(信号原理、操作系统的原理、volatile)

对于OS来说,只要完全没有进程,它就陷在死循环中,但只要有进程,就会一直忙着调度,这是时钟源的中断推着它进行的。我们因此可以说。

SGlow0708的博客 1269

Linux相关概念和易错知识点(23)(进程间通信、匿名管道、进程池)

通过进程池的代码,我们能够进一步深入了解进程间通信的原理,其中最难理解的就是数据不一致问题,匿名管道的面向字节流就决定了它不适合多次数据传输,不过我们依然使用它走完了进程池的流程,了解即可。在整个过程中,读写端都将对方当作了文件,都是对pipe文件进行IO,这再次体现出Linux一切皆文件的思想,值得我们体会。

SGlow0708的博客 1082

Linux下进程以及相关概念理解

当代码进行编译链接等操作后就会生成一个可执行程序,这个可执行程序本质上也是一个文件,存放在磁盘上。当使这个可执行程序运行起来,本质上是将这个程序加载到内存当中了,因为只有加载到内存后,CPU才能对其进行逐行的语句执行,而一旦将这个程序加载到内存后,我们就不应该将这个程序再叫做程序了,严格意义上将应该将其称之为进程

GG_Bruse的博客 8988

操作系统——Linux进程概念、控制及相关知识的理解

在学习Linux的过程中,进程这一概念,理解起来是有一定难度的,知识点也比较多,但这一部分知识点又相当重要。因此专门写一篇文章,整理一下Linux进程的知识,分享的同时,也方便后面复习。

wjyyywarm的博客 947

Linux相关概念和易错知识点(15)(exec系列函数)

fork函数内部会为我们拷,数据和代码,创建PCB,当走到最后return语句时两个进程分别返回,之后父子进程保持独立。但当execl成功时,它是没有返回值的,因为execl是对进程的代码数据进行完整地替换,当execl成功时,它自己也被覆盖了,自然不存在返回值这种说法。这中间涉及到子进程原有代码和数据的回收,硬盘导入新的代码和数据到内存中,修改页表和进程地址空间,修改一些PCB属性等操作。如execlp("ls", "ls", "a", NULL),虽然第一个和第二个参数同,但含义却不同。

SGlow0708的博客 1303

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

这样做的好处是子进程执行失败完全不会影响父进程的安全性,如果直接让父进程执行所有命令,那么如果出了一个较严重的错误,父进程就直接被挂掉了,这显然不是我们希望看到的。获取的环境变量是从我们自己拷贝得到的环境变量表中取,而不是在该进程原本的环境变量表中取。,我们可以在函数里定义string,然后返回它,这样做不会出现和数组那样的野指针问题,会自动初始化一个新的string。,但事实上修改cwd后PWD依然不变,cwd和PWD都只是数据而已,并没什么大不了的,因此我们需要手动putenv。但程序中还有一个变量。

SGlow0708的博客 1109
上一篇: Linux相关概念和易错知识点(7)(git、冯诺依曼体系结构)
下一篇: Linux相关概念和易错知识点(9)(父进程、子进程、进程状态)
-SGlow-
博客等级 码龄3年 1513粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值