Linux进程概念(二):进程的基本概念与进程的创建

目录

进程的基本概念

进程控制块-PCB

学前补充

预备知识

创建(子)进程

创建(子)进程的原因

理解fork有两个返回值


进程的基本概念

基本概念:程序的一个执行实例,正在执行的程序等

内核层面:担当分配系统资源(CPU时间、内存)的实体

操作系统如何管理进程:

先描述:

  1. 操作系统将一个磁盘中的可执行程序加载到内存中时,内存中只有可执行程序的代码和数据,如果这一部分也算进程的话,该进程什么时候开始被调度的?被调度了多少时间了?......这些信息是“代码 + 数据”部分不包含的,所以加载到内存的可执行程序的代码和数据不是进程,它们只是构成进程的代码段和数据段,是进程的一部分
  2. 操作系统为了管理进程,会将代码段和数据段中的属性以及进程所需的其它属性(当前状态,加载时间...)都进行描述,并将所有描述放入一个叫PCB的结构体中(PCB中还有一个用于访问内存中该进程数据段和代码段的内存指针,以及存放下一个PCB地址的next指针)
  3. 一个进程对应一个PCB,每当加载一个进程时系统就会生成一个对应的PCB
  4. 简单定义:进程 = PCB + 自己的代码段和数据段

后组织:

  1. 将所有PCB连接成一个链表
  2. 此时,操作系统对进程的管理就变成了链表的增删改查

进程控制块-PCB

基本概念:process control block,是进程的所有属性的集合,是对所有操作系统中进程控制块的统称,是一个内核中的数据结构,在不同操作系统中进程控制块会有不同的具体名称(Linux操作系统内核中又叫任务结构体“Task Struct”)

为什么要有PCB:操作系统要对进程进程管理

  • 磁盘中的可执行程序的代码段和数据段被加载到内存中
  • 操作系统会生成该可执行程序对应进程的属性集合-进程控制块
  • 所有进程控制块会连接成一个数据结构(队列等)
  • CPU对进程进程调度时,会去队列中选取进程调度

结论:所谓的进程在操作系统排队不是代码和数据排队,实际上是进程控制块在排队

问题:进程是如何动态运行的?

答:进程控制块通常会被放置在不同的队列中,操作系统可以根据进程的状态和优先级动态调度这些队列中的进程,从而实现了进程的动态运行和资源管理(同一个进程控制块(PCB)可以被放置在多个不同的队列中)

学前补充

  1. ./可执行二进制文件的本质是让系统创建进程并运行
  2. 在本质上,我们自己所写的代码形成的可执行文件 == 系统命令 == 可执行文件
  3. linux中运行的大多数指令,本质都是运行进程
  4. ps指令用于查看所有的当前进程

预备知识

task_struct中的属性:

  1. 标识符:每个进程对应一个特殊的标识符
  2. 状态:任务状态,退出代码,退出信号等
  3. 优先级:相对于其它进程的优先级
  4. 程序计数器:程序中即将被执行的下一条指令的地址
  5. 内存指针:包括程序代码和进程相关数据的指针,还有和其它进程共享的内存空的指针
  6. 上下文数据:进程执行时处理器的寄存器中的数据
  7. I / O状态信息:包括显示的I/O请求,分配给进程I/O设备和被进程使用的文件列表
  8. 记账信息:可能包括处理器时间综合,使用的时钟数总和,时间限制,记账号等
  9. 其它信息

1、显示当前所有进程的详细信息指令:ps axj

2、显示指定进程的详细信息指令:ps axj | grep 指定进程名的关键字

有两行的原因是,grep也是一个进程,它用来过滤出叫myprocess的内容

3、查看获取的首行信息:ps axj | hear -1

4、同时执行多个指令:指令1 && 指令2 && ...

5、查看获取的首行信息与指定的进程信息指令:ps axj | head -1 && ps axj | grep 指定关键字

6、 每一个进程都有属于自己的标识符PID,PID互不相同(task_struct中的无符号整型变量)

7、PID位于操作系统的内核数据结构中,用户不能直接访问操作系统内内核数据结构中的PID:

8、在不使用ps指令的前提下,用户想要获取自己所写的可执行程序的PID,需要使用操作系统提供的系统调用接口getpid():

  1. 接口原型:pid_t getpid(void)
  2. 包含头文件:<unistd.h>
  3. 功能:返回子进程的PID
  4. pid_t类型是对unsigned int 类型的封装

get ppid指令是用于获取当前进程的父进程的PID,一个子进程是由父进程创建的

每次启动子进程时,子进程的pid都不一样,但是父进程的ppid都一样

父进程就是命令行解释器bash

9、ctrl + c本质是就是杀死进程的指令,还有其它杀死进程的指令:kill -9 进程的PID

创建(子)进程

基本概念:新建进程即在操作系统的内核数据结构中新增一个进程控制块,而用户不能直接对操作系统的内核数据结构进行增删改查,所以需要用到操作系统提供的系统调用接口

系统调用接口原型:pid_t fork(void)

包含头文件:<unistd.h>

功能:创建子进程

监控脚本指令:while :; do ps axj | head -1 && ps axj | grep myprocess |  grep -v grep; sleep 1; done

代码预期效果:先打印一行,等待三秒后打印两行hello world,等待五秒后程序结束

结论1:fork后,父子代码共享

        创建一个进程的本质就是系统中多了一个进程,多了一个进程(进程 = PCB + 数据和代码)就意味着内核数据结构中多了一个进程控制块,内存中多了该进程对应的数据段和代码段,父进程的数据段和代码段可能是从磁盘中获取的,但是子进程的代码段和数据段是从哪里来的?默认情况子进程继承父进程的代码段和数据段(这就是为什么fork之后父子进程的代码才是共享的)但是因为进程具有独立性,所以从原则上讲父子进程的数据段是要分开的,而代码段由于具有只读性质,所以是可以共享的(数据段的独立是通过写时拷贝技术实现的)

创建(子)进程的原因

目的:令子进程和父进程执行不一样的代码

做法:利用fork接口的返回值

  • 返回值 = -1:创建子进程失败
  • 返回值 = 0:运行子进程代码
  • 返回值 > 0:运行父进程代码

注意事项:

1、fork接口会返回两次返回值 

2、两次返回值的id,一个是子进程的id,一个是父进程的id,父进程的id是子进程的pid

验证:

  1. fork后父子进程实际上还是共享一段代码,只不过这里通过if...else语句让二者执行不同内容
  2. 之前if和else的内容不能同时进行,是单进程,这里二者可以同时进行,是多进程

理解fork有两个返回值

问题:不考虑特殊情况,当一个函数执行到return时,函数的核心工作是否以及完成?

答:是,因此在调用fork()函数后,父进程和子进程的创建是在fork()函数返回之前完成的,此后的代码会被父子共享包括return id,因此返回两次id,一个是父进程的id,一个是子进程是否创建成功的id

~over~

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

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

相关文章

(源码+讲解+部署)基于Spring Boot和Vue的考研教育系统的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《128套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f…

打造专业运营团队,武汉星起航引领全球跨境电商未来趋势

近年来&#xff0c;随着全球经济的不断发展&#xff0c;跨境电商作为国际贸易的一种新模式&#xff0c;已然成为推动全球经济增长的新引擎。在这个浩荡的潮流中&#xff0c;武汉星起航以亚马逊自营店铺为依托&#xff0c;凭借丰富的实战运营经验和专业的团队&#xff0c;正积极…

Spring Boot 介绍

1、SpringBoot 介绍 用通俗的话讲&#xff0c;SpringBoot 在Spring生态基础上发展而来&#xff0c;它的发现不是取代Spring&#xff0c;是为了让人们更容易使用Spring。 2、相关依赖关系 Spring IOC/AOP > Spring > Spring Boot > Spring Cloud 3、 SpringBoot工作原…

四信AI智能视频边缘分析盒+传感云平台,开启食品安全智慧监管新模式

方案背景 民以食为天&#xff0c;食品是人类生存必备的物质之一&#xff0c;食品生产安全关乎每个人的生命健康与社会可持续发展。在食品生产过程中&#xff0c;如何实现安全、健康生产是监管机构首要考虑因素&#xff0c;也是当今社会必须共同关注与努力的方向。 监管机构必…

【C++】vector问题解决(非法的间接寻址,迭代器失效 , memcpy拷贝问题)

送给大家一句话&#xff1a; 世界在旋转&#xff0c;我们跌跌撞撞前进&#xff0c;这就够了 —— 阿贝尔 加缪 vector问题解决 1 前言2 迭代器区间拷贝3 迭代器失效问题4 memcpy拷贝问题 1 前言 我们之前实现了手搓vector&#xff0c;但是当时依然有些问题没有解决&#xff…

牛市股票还会亏钱?--外观模式

1.1 牛市股票还会亏钱&#xff1f; 炒股&#xff0c;碰到熊市&#xff0c;亏得一塌糊涂。 "我们公司的人现在都在炒股票&#xff0c;其实大部分人都不太懂&#xff0c;就是因为现在股市行情很火&#xff0c;于是都在跟风呢&#xff01;" 刚入市的人&#xff0c;什么都…

Day84:服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

目录 端口协议-口令爆破&未授权 弱口令爆破 FTP&#xff1a;文件传输协议 RDP&#xff1a;Windows远程桌面协议 SSH&#xff1a;Linux安全外壳协议 未授权案例(rsync) 桌面应用-QQ&WPS&Clash QQ RCE 漏洞复现 WPS RCE 漏洞复现 Clas* RCE 漏洞复现 知识点…

【攻防世界】ics-05

php://filter 伪协议查看源码 preg_replace 函数漏洞 1.获取网页源代码。多点点界面&#xff0c;发现点云平台设备维护中心时&#xff0c;页面发生变化。 /?pageindex 输入什么显示什么&#xff0c;有回显。 用php://filter读取网页源代码 ?pagephp://filter/readconvert.…

设计模式 --5观察者模式

观察者模式 观察者模式的优缺点 优点 当一个对象改变的时候 需要同时改变其他对象的相关动作的时候 &#xff0c;而且它不知道有多少具体的对象需要改变 应该考虑使用观察者模式 。观察者模式的工作就是解除耦合 让耦合双方都依赖与抽象 而不是具体 是的各自改变都不会影响另…

【文献分享】ALKEMIE:加速材料发现和设计的智能计算平台

题目&#xff1a;ALKEMIE: An intelligent computational platform for accelerating materials discovery and design 链接&#xff1a;DOI: 10.1016/j.commatsci.2020.110064 ALKEMIE&#xff1a;加速材料发现和设计的智能计算平台 摘要 通过传统的试错方式开发具有目标特性…

ChatGPT 的核心 GPT 模型:探究其生成式预训练变换架构的革新与应用潜力

GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型是一种深度学习模型&#xff0c;由OpenAI于2018年首次提出&#xff0c;并在随后的几年中不断迭代发展&#xff0c;包括GPT-2、GPT-3以及最新的GPT-4。GPT模型在自然语言处理&#xff08;NLP&#xff09;领域…

ssm基于HTML5的出租车管理系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此出租车信息的管…

Linux云计算之Linux基础3——Linux基本认识操作

1、终端 终端(terminal)&#xff1a;人和系统交互的必要设备&#xff0c;人机交互最后一个界面&#xff08;包含独立的输入输出设备&#xff09; 物理终端(console)&#xff1a;直接接入本机器的键盘设备和显示器虚拟终端(tty)&#xff1a;通过软件方式虚拟实现的终端。它可以…

C++相关概念和易错语法(4)(构造函数、析构函数)

一、构造函数 1.实现的功能&#xff1a;实例化对象的时候默认自动调用&#xff0c;相当于初始化。 条件&#xff1a;在书写时要满足构造函数的规范&#xff08;函数名 类名&#xff0c;不写返回值&#xff0c;也没有返回值&#xff09;&#xff0c;可以用inline来修饰。 2.自…

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

4.6 offset指令&#xff0c;jmp short指令&#xff0c;far&#xff0c;dword ptr各种跳转指令 可以修改IP&#xff0c;或同时修改CS和IP的指令统称为转移指令。概括的讲&#xff0c;转移指令就是可以控制CPU执行内存中某处代码的指令 1. 转移指令 1.1 8086CPU的转移行为有以…

按照指定的分隔符和次数从右侧开始分割字符串元素numpy.char.rsplit()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 按照指定的分隔符和次数 从右侧开始分割字符串元素 numpy.char.rsplit() [太阳]选择题 请问关于以下代码表述错误的选项是&#xff1f; import numpy as np a np.array([a b c, x,y,z, 1 2,…

HackTheBox-Mist

整体思路 端口扫描->Pluck CMS组件文件读取漏洞->文件上传获取shell->创建指向exe的快捷方式来提权-> 信息收集&端口利用 namp -sSVC 10.10.11.17目标只开放了80端口&#xff0c;将mist.htb加入到hosts文件后&#xff0c;访问mist.htb Pluck CMS文件读取 在…

3.6k star, 免费开源跨平台的数据库管理工具 dbgate

3.6k star, 免费开源跨平台的数据库管理工具 dbgate 分类 开源分享 项目名: dbgate -- 免费开源跨平台的数据库管理工具 Github 开源地址&#xff1a; GitHub - dbgate/dbgate: Database manager for MySQL, PostgreSQL, SQL Server, MongoDB, SQLite and others. Runs under…

Ps:合并到 HDR Pro

Ps菜单&#xff1a;文件/自动/合并到 HDR Pro Automate/Merge to HDR Pro 合并到 HDR Pro Merge to HDR Pro命令可以将同一场景的具有不同曝光度的多个图像合并起来&#xff0c;从而捕获单个 HDR 图像中的全部动态范围。 合并到 HDR Pro 命令分两步进行。 首先&#xff0c;需要…

Day82:服务攻防-开发组件安全Solr搜索Shiro身份Log4j日志本地CVE环境复现

目录 J2EE-组件Solr-本地demo&CVE 命令执行&#xff08;CVE-2019-17558&#xff09; 远程命令执行漏洞(CVE-2019-0193) Apache Solr 文件读取&SSRF (CVE-2021-27905) J2EE-组件Shiro-本地demo&CVE CVE_2016_4437 Shiro-550Shiro-721(RCE) CVE-2020-11989(身…