【lesson16】进程

什么是进程

在这里插入图片描述
我们用一张Windows下的任务管理器图来辅助我们观看,我们一个可以看到应用在运行的时候就是一个个进程
所以我们启动了一个软件本质上就是启动了一个进程
在Linux下运行一条命令,./XXX运行的时候其实就是在系统层面创建了一个进程!!!
我们知道代码会生成可执行程序,而可执行程序是不能被OS(操作系统调度的),只有在可执行程序被运行变成进程的时候才会被调度,因为OS(操作系统)只能对进程进行调度

如何管理进程

我们知道Windows下存在大量的exe文件,类比到Linux所以Linux下肯定存在大量的exe文件。所以我们可以理解Linux是可以同时加载多个程序的,Linux是同时存在大量的进程在系统的内存中的。
单个可执行程序被加载到内存,并且被CPU调度过程:
在这里插入图片描述
多个可执行程序被加载到内存变成进程:
那么Linux系统要不要管理这些进程呢?
答案:肯定是要的。

在这里插入图片描述
当多个可执行程序被加载到内存变成进程,CPU该如何调度呢?所以Linux操作系统必须对这些进程进行管理。
那么Linux系统是如何管理大量进程的呢?
答案:先描述,再组织

我们先定义一个对象来描述单个进程的核心信息比如进程被调度的时间、进程的优先级、进程的上下文数据等等。然后再用数据结构对这些进程进行管理。
描述进程的对象叫做进程PCB结构体。PCB包含了所有进程属性。
如何理解对象或者类呢?
人们认识世界是通过“属性”来认识世界的。
比如:有一种动物它是人类的朋友,高兴的时候会摇尾巴,遇到陌生人会汪汪叫。我们立马会想到这是狗。
再比如:有一种动物体型很大,额头上会写一个王字,是食肉动物。我们会立马想到这是老虎。

那么属性是数据吗?
答案:是的,属性也是数据。
属性和程序内的代码和数据有关系吗?
答案:没有关系,它们是两套概念没有任何联系。

那么Linux是用什么数据结构管理这些进程PCB的呢?
在这里插入图片描述
我们可以看到Linux用链表的结构来管理这些进程PCB。
这样我们对进程的管理,变成了对进程PCB结构体链表的增删查改。

从这里我们可以知道 进程 = 对应代码和数据 + 进程对应的PCB结构体

PCB是什么?
例子:假如要表明你是清华的学生,是你人在清华就表明你就是清华的学生吗?这样清华的保安,社管阿姨,食堂阿姨等等这些人也是清华的学生。
在这里插入图片描述
可想而知要表明自己试清华的学生不仅仅是如此,还必须各种信息被录入到清华的教务管理系统中。
在这里插入图片描述
那么清华校长如果要开除某个学生仅仅是让学生离开清华而已吗?
不仅仅是如此,还必须在教务系统中删除这个学生的信息。

在这里插入图片描述
上面的清华的这一套管理体系就是PCB的管理体系。

那么进程PCB具体保存哪些数据呢?
如图所示:
在这里插入图片描述

查看进程

前面我们说了这么多那么我们该如何在Linux操作系统中查看进程呢?
首先我们写一个死循环程序,这样进程就可以一直存在便于我们查看。
在这里插入图片描述
生成可执行程序,然后运行可执行程序变成进程。
在这里插入图片描述
创建一个新的会话然后在新的会话中查看进程。
在这里插入图片描述
我们看到用查看进程的命令确实看到了进程,如果我们把进程Ctrl c掉还会存在进程吗?
在这里插入图片描述
在这里插入图片描述
我们可以看到进程确实消失了。而图里的进程我们可以理解为,grep也是一个进程所以当我们查看的时候,grep进程也会存在。
在这里插入图片描述
我们还有一种查看进程的方法。
Linux下有一个专门保存进程的proc文件。
在这里插入图片描述
我们可以看到确实查到了该进程。
我们查看该进程文件内部。
在这里插入图片描述
我们会看到关于进程的各种信息
其中的cwd而cwd就是当前进程工作目录。也就是可执行程序当前存在的位置。
在这里插入图片描述
每一个进程都会保存自己的工作路径。
proc下的目录时动态的当进程被删除时Linux会自动删除保存进程的目录。
在这里插入图片描述
我们如何用代码获取进程的pid呢?
Linux操作系统给我们提供了一个接口,getpid()可以帮助我们获取当前进程pid。
在这里插入图片描述
其中pid_t是一个整形。
在这里插入图片描述
在这里插入图片描述
我们可以看到确实获得了进程的pid,那么该pid是这个进程的吗?我们用kill发送9号信号来杀掉进程,看进程会被会被kill。
在这里插入图片描述
我们可以看到,用该进程pid发送kill信号确实把该进程杀掉了。
我们之前查看进程的时候应该看到了ppid那么ppid是什么呢?
ppid是该进程的父进程ID,那么我们如何获取呢?
Linux也给我们提供了getppid()接口,可以获得父进程ID。
在这里插入图片描述
在这里插入图片描述
那么看到了父进程那么该父进程是谁呢?
在这里插入图片描述
我们可以看到父进程就是bash我们之前在shell的运行原理中也学过bash这里就不过多介绍。
这里的bash也是可以被kill掉的,这里就不过多演示,大家有兴趣可以自己试验。

创建子进程

我们学习了进程,也学了父进程那么我们该如何自己创建一个进程呢?
Linux也给我们提供了接口fork()。
在这里插入图片描述
在这里插入图片描述
我们可以从英文中知道返回值:
在这里插入图片描述
具体如何使用fork,下次博客在介绍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
预处理是数据分析中非常重要的步骤,它是为了准确分析数据而对数据进行的一系列操作。对于lesson数据进行预处理的目的是为了优化数据的质量、可用性和可靠性,以便更好地支持后续的数据分析工作。下面我将从数据清洗、数据规范化、数据转换、数据集成四个方面说明如何对lesson数据进行预处理。 首先是数据清洗,这是预处理的第一个步骤。数据清洗的目的是识别和处理数据中的错误、不一致、重复和缺失等问题,使得数据能够精确无误地支持后续的分析工作。对于lesson数据,我们可以通过删除重复值、填充缺失值、调整不一致的数据格式等方式进行数据清洗。 其次是数据规范化,这是为了处理数据的格式和范围,使得数据更加一致性和可比性。对于lesson数据,我们可以进行数据标准化,如将日期格式统一为YYYY-MM-DD,将文本内容转化为小写或大写等等。 然后是数据转换,这是为了将数据从原始格式转化为适合分析的格式。对于lesson数据,我们可以进行数据转换,如将非数值数据转换为数值数据,对数据进行分类或聚类,进行分箱等等。 最后是数据集成,这是为了将多个数据集合并成一个更大、更全面和更一致的数据集。对于lesson数据,我们可以将不同的数据源集成,比如将学生的成绩、出勤记录、课程评价等数据集成在一起,以进行更全面的数据分析和挖掘。 综上所述,通过数据清洗、数据规范化、数据转换、数据集成等多方面预处理操作,我们可以提高lesson数据的质量、可用性和可靠性,为后续的数据分析工作提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值