Linux:进程概念

目录

1 冯诺依曼体系

 2 操作系统(Operator System)

3 如何理解管理

3.1计算机管理硬件

3.2 管理逻辑图

3.3 怎样管理 

 4 什么是进程?

5 查看进程 

5.1  ps ajx显示所有进程信息

5.2 /proc(内存文件系统)

5.2.1 ls /proc/PID

5.2.2 ls /proc/PID -al

​ 5.3 PPID与PID 

6 getpid(),getppid()

 7 父进程与子进程

7.1子进程的创建 (fork)

总结 


1 冯诺依曼体系

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

我们所认识的计算机,都是有一个个的硬件组件组成:

  • 输入单元:包括键盘, 鼠标,扫描仪, 写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

关于冯诺依曼:

这里的存储器指的是内存 不考虑缓存情况,这里的CPU能且只能对内存进行读写不能访问外设(输入或输出设备) 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。 一句话,所有设备都只能直接和内存打交道

 2 操作系统(Operator System)

操作系统:对下与硬件交互,管理所有的软硬件资源。对上为用户程序(应用程序)提供一个良好的执行环境。一句话就是操作系统是管理软硬件的软件。

3 如何理解管理

3.1计算机管理硬件

  •  描述起来,用struct结构体
  •  组织起来,用链表或其他高效的数据结构

总结就是六个字:先描述,再组织

3.2 管理逻辑图

3.3 怎样管理 

操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!

 4 什么是进程?

当你写完一个程序的时候,在没运行的时候,代码存在于哪里呢?存在于磁盘中,当程序运行的时候,程序就会被加载到内存之中,此时该程序还不是进程。在一个操作系统中,除了运行你的程序之外,还运行着其他的程序,那么系统中这些程序都是杂乱无章的吗?当CPU处理这些任务的时候考不考虑优先级呢?

运行中程序的管理:先描述再组织

描述过程:操作系统为每一个运行的程序用一个 struct task_struct 结构体来描述运行的程序的属性和信息。

组织过程:可以认为把创建的strcut 用双向链表进行链接。

操作系统中为每一个运行的程序维护一个数据结构,数据结构中应该存放该进程的所有相关的属性和信息。

所以说,进程=磁盘中的代码+内核的数据结构

在Linux操作系统下,我们称它为PCB,Process Control Block,即进程控制模块。

5 查看进程 

系统调用

想象一下,如果操作系统完全暴露在用户面前,对于新手用户可能会误触到操作系统内核的数据或者指令,导致出现不可挽回的后果。于是,操作系统为了安全考虑,不会将自己的底层直接交给用户操作,而是将操作系统封装起来,并提供一些特定的接口以供用户使用,这样的由操作系统给用户提供的操作接口,就被称为系统调用。

进程查看

上面我们已经了解到了进程,那么对于系统中的进程我们该怎么查看呢?下面介绍几种查看进程的系统调用指令。

5.1  ps ajx显示所有进程信息

 但是,上述命令不利于我们查找自己的进程信息,如下我们编写一个程序名为process,运行之后想要在系统中查看它的进程信息,我们可以使用:

 ps ajx | head -1&&ps ajx  | grep process来查看它。(head表示显示头栏)

创建的process程序,内容随意。 

接下来我们通过   ps ajx | head -1&&ps ajx  | grep process 命令查看进程信息

查看进程的时候发现出现了两个进程,其中一条是执行grep命令的进程。要想过滤掉它,我们可以用ps ajx | head -1 && ps ajx | grep Process | grep -v grep。

5.2 /proc(内存文件系统)

进程的信息还可以通过 /proc 系统文件夹查看,如果我们要想查看PID(Process I D)为 2的进程,可以进行如下操作。

5.2.1 ls /proc/PID

那么这个数字2 是什么呢,在上述我们使用 ps ajx 命令时,会发现头栏有PID(Process I D) 。即为标识一个进程的重要信息,类似于身份证号的概念,对于系统中的每一个进程,系统都会分配给其一个唯一的PID,/proc就是以这个来查看进程信息的。

 例如如下进程的PID 为2121

接下来我们使用/proc/PID 命令进行查看

5.2.2 ls /proc/PID -al

该指令用来查看进程的更多信息,圈出来的红框里的两个信息

cwd:表示当前进程运行的路径

exe:表示可执行文件的路径

 5.3 PPID与PID 

PID即Process ID,上面讲到了PID是一个进程的标识符,担当着“身份证号”的角色,每一个系统中的进程都有唯一的PID。那么PPID是什么呢?即Parent Process ID,为当前进程的父进程ID。

 为什么要有父进程的这个概念:当我们在执行shell脚本的时候,这个动作是由登录的shell(父进程)处理的,有的也叫bash(shell 或者bash 就是命令解释器), 为了执行指令,父进程bash会创建一个新的子进程用来代替父进程执行命令,子进程是父进程的一个副本,它独立运行,这种方式保证了脚本执行的安全性和隔离性,避免了对父进程状态的影响。后面我们会看到bash.


6 getpid(),getppid()

除了上述的查看一个进程的PID与PPID的方法,系统还提供了一个调用接口

通过系统调用获取进程标示符

 getppid()是获取父进程的PID

当我们结束这个程序再次运行的时候,我们发现,每次重新形成一个进程时,系统都会为它分配一个ID,所以第一次的ID是22783,第二次的变成了23883,但是后面的父进程14105为什么不变呢?

 7 父进程与子进程

通过上图我们可以看到父进程的PID 14105是不变的,那么后面的~bash是什么呢,前面也有所说,bash是命令解释器, 为了执行指令,父进程bash会创建一个新的子进程用来代替父进程执行命令,子进程是父进程的一个副本,它独立运行,这种方式保证了脚本执行的安全性和隔离性,避免了对父进程状态的影响

7.1子进程的创建 (fork)

在上面我们已经了解到了进程的形成过程,以及怎么查看进程相关的信息和属性,,且我们知道了父进程和子进程,那么我们该如何自己创建一个子进程呢?操作系统已经为用户提供了一个系统调用接口来创建子进程:fork()

认识fork

 ✍fork()返回值

fork()创建一个子进程的时候会把该进程的PID传给父进程,而把0传给该子进程,若创建子进程失败会把-1传给父进程,接下来我们用一个例子来进行说明。 

 运行结果:

我是父进程:pid:3058,ppid :14105,id 3059

我是子进程:pid :3059,ppid :3058,id 0

解释一下:前面也说过fork()是一个创建子进程的函数,当我们创建一个子进程的时候。

我是子进程:pid :3059,ppid :3058,id 0,子进程的pid会传给父进程:我是父进程:pid:3058,ppid :14105,id 3059。所以父进程的id 为3059,且子进程的ppid为3058,而父进程pid为3058,说明其为父子进程关系。而ppid 14105的这个进程不是别的,是bash.


总结 


  • fork()之后,会有父进程+子进程两个进程在执行后续代码。
  • fork()后续的代码,被父子进程共享。
  • 通过返回值不同,让父子进程执行后续共享代码的一部分。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B/B+树与mysql索引

数据结构操作网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(log n)O(log n) B树 算法平均最差空间O(n)O(n)搜索O(log n)O(log n)插入O(log n)O(log n)删除O(…

SQL命令详解之增删改数据

目录 简介 1 添加数据 1.1 基础语法 1.2 SQL 练习 2 修改数据 2.1 基础语法 2.2 SQL 练习 ​3 删除数据 3.1 基础语法 3.2 SQL 练习 总结 简介 在数据库操作中,增、删、改是最基础的操作,它们通常对应着SQL中的INSERT、DELETE和UPDATE命令。…

爱普生可编程晶振 SG-8101CE 在智能家居领域展现出的优势

在智能家居的全场景应用中,设备间的协同效率、数据传输的稳定性以及系统运行的可靠性,成为衡量用户体验的核心标准。爱普生 SG-8101CE 可编程晶振以其卓越的性能,为智能门锁、传感器、中控系统等设备提供核心动力,助力厂商打造更可…

Pytest之fixture的常见用法

文章目录 1.前言2.使用fixture执行前置操作3.使用conftest共享fixture4.使用yield执行后置操作 1.前言 在pytest中,fixture是一个非常强大和灵活的功能,用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等, 与setup和te…

植物大战僵尸金铲铲版 v1.1.6(windows+安卓)

游戏简介 《植物大战僵尸金铲铲版》是由“古见xzz”、“对不起贱笑了”、“是怪哉吖”等联合开发的民间魔改版本,融合了原版塔防玩法与《金铲铲之战》的自走棋元素,属于非官方同人作品。 游戏特点 合成升星机制:三个相同低星植物可合成更高…

Matplotlib基础知识总结

1、简介 安装使用pip install matplotlib命令即可; 2、基本绘图流程 3、pyplot基础语法 (1)创建画布与创建子图 figure语法说明:figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue)&#xff1…

实例分割 | yolov11训练自己的数据集

前言 因工作要求使用的都是yolov5系列的模型,今天学习一下最先进的yolov11,记录一下环境配置及训练过程。 1.项目下载及环境安装 源码位置:yolov11 可以看到,这里要求python版本大于等于3.8,我这里安装python3.10.…

【MongoDB】在Windows11下安装与使用

官网下载链接:Download MongoDB Community Server 官方参考文档:https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-windows/#std-label-install-mdb-community-windows 选择custom类型,其他默认 注意,此选…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

Python中文自然语言处理库SnowNLP

SnowNLP 介绍 SnowNLP 是一个基于 Python 的中文自然语言处理库,专为处理中文文本而设计。它受到 TextBlob 的启发,但与 TextBlob 不同的是,SnowNLP 没有使用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字…

windows共享文件夹到麒麟桌面操作系统操作步骤

此文档是将windows的共享文件夹在麒麟桌面操作系统里实现访问。该文档是以windows11+kylinos-2303为例编写。 1、在windows上新建文件夹 2、右击myshare文件夹,点击属性,在属性窗口中点击【共享】页签,点击【共享】 3、点击文本框后边的向下箭头,选择Everyone,后点击…

《Qt窗口动画实战:Qt实现呼吸灯效果》

Qt窗口动画实战:Qt实现呼吸灯效果 在嵌入式设备或桌面应用中,呼吸灯效果是一种常见且优雅的UI动画,常用于指示系统状态或吸引用户注意。本文将介绍如何使用Qt动画框架实现平滑的呼吸灯效果。 一、实现原理 利用Qt自带的动画框架来实现&…

JavaWeb基础专项复习6(2)——AJAX补充

目录 1、load(url, [data], [callback]) 1.1 语法 1.2概述 1.3参数 url,[data,[callback]]String,Map/String,CallbackV1.0 1.4示例 HTML 代码: jQuery 代码: 2、get(url, [data], [callback], [type]) 2.1 语法 2.2 概述 2.3 参数 url,[data],[callback],[type]St…

稀疏数组学习

稀疏数组(Sparse Array) 是一种用于压缩存储大量默认值(通常是 0)的数组的数据结构。它通过只存储非默认值的元素及其位置来节省空间。稀疏数组常用于存储矩阵或二维数组,尤其是当数组中大部分元素为默认值时。 稀疏数…

一、Vscode、Git、Github账号及个人访问令牌

一、Vscode下载、安装 1.Vscode 下载地址 2. Vscode安装 3.Vscode 配置C 安装插件 中文插件(安装后重启生效) C 扩展包 MinGw下载 MinGw蓝奏云下载链接,密码:64xamingw-64 官网—>下载时需要访问Github,需要挂梯子 配…

【 实战案例篇三】【某金融信息系统项目管理案例分析】

大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。 Cookies简介 …

Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 3 部分

附件下载 联系工作人员获取附件 在 OpticStudio 中使用 RCWA 工具为增强现实(AR)系统设置出瞳扩展器(EPE)的示例中,首先解释了 k空间中光栅的规划,并详细讨论了设置每个光栅的步骤。 介绍 本文是四篇文…

Acwing 哞叫时间II

6134. 哞叫时间II - AcWing题库 题目大意:统计数组中子序列abb的数量: 做法:从右往左枚举倒数第二个b,查前面出现过多少次a,查的方法(开一个数组left[x]来统计当前及前面出现过多少次x,cnt记录不同x的数量…

PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下

PyCharm中通过命令行执行pip命令下载到哪里了:虚拟环境目录下 在PyCharm中通过命令行执行pip命令安装工具包,包的下载位置取决于多种因素 虚拟环境 如果项目使用了虚拟环境(通常是推荐的做法): Windows:虚拟环境通常位于项目目录下的.venv文件夹(默认情况)或你指定…