【lesson9】进程

文章目录

  • 什么是进程
  • 如何管理进程
  • 查看进程
  • 创建子进程

什么是进程

在这里插入图片描述
我们用一张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,下次博客在介绍。

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

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

相关文章

数据结构——单链表

目录 一.前言 二.链表表示和实现(单链表) 1.1 顺序表的优缺点 1.2 链表的概念及结构 1.3 打印函数 1.4 空间函数 1.5 尾插函数(最最最麻烦的) 1.5.1 尾插最关键部分! 1.6 头插函数 1.7 尾删函数…

目标检测(Object Detection)概念速通

参考博文:目标检测(Object Detection)_YEGE学AI算法的博客-CSDN博客 这篇参考的相当多,写的真的很好很入门,觉得很有用,想详细了解的可以去看看,侵删↑ 上回组会分享了DETR和MDETR,…

启山智软/一款包含主流商城类型的一款电商中台系统100%开源

文章目录 介绍一、Smart Shop JAVA 微服务电商中台优势二、电商中台包含那些主流商城模式1.S2B2C供应链商城2.B2B2C多商户商城3.B2C单商户商城4.O2O外卖配送商城5.社区团购商城 6.演示地址总结 介绍 想要了解代码规范,学习商城解决方案,点击下方官网链接…

API(九)基于协程的并发编程SDK

一 基于协程的并发编程SDK 场景: 收到一个请求会并发发起多个请求,使用openresty提供的协程说明: 这个是高级课程,如果不理解可以先跳过遗留: APSIX和Kong深入理解openresty 标准lua的协程 ① 早期提供的轻量级协程SDK ngx.thread ngx…

Qt创建线程(线程池)

1.线程池可以创建线程统一的管理线程(统一创建、释放线程) 2.使用线程池方法实现点击开始按钮生成10000个随机数,然后分别使用冒泡排序和快速排序排序这10000个随机数,最后在窗口显示排序后的数字: mainwindow.h文件…

Lua学习笔记:探究package

前言 本篇在讲什么 理解Lua的package 本篇需要什么 对Lua语法有简单认知 对C语法有简单认知 依赖Visual Studio工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级…

#循循渐进学51单片机#指针基础与1602液晶的初步认识#not.11

1、把本节课的指针相关内容,反复学习3到5遍,彻底弄懂指针是怎么回事,即使是死记硬背也要记住,等到后边用的时候可以实现顿悟。学会指针,就是突破了C语言的一道壁垒。 2,1602所有的指令功能都应用一遍&#…

DA5 网站用户没有补全的信息

目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID …

量子计算基础知识—Part1

1.什么是量子计算机? 量子计算机是基于量子力学原理构建的机器,采用了一种新的方法来处理信息,从而使其具有超强的功能。量子计算机使用Qubits处理信息。 2. 什么是量子系统? 一个量子系统指的是由量子力学规则描述和控制的物理…

ETHERNET IP站转MODBUS RTU协议网

产品介绍 JM-EIP-RTU是自主研发的一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-RTU设备接入到ETHERNET/IP网络中。 JM-EIP-RTU连接到ETHERNET/IP总线中做为从站使用,连接到MODBUS-RTU总线中做为主站或从站使用。 产品参数 技术参数 l 网关…

Django系列:Django应用(app)的创建与配置

Django系列 Django应用(app)的创建与配置 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article…

EDA(Exploratory Data Analysis)探索性数据分析

EDA(Exploratory Data Analysis)中文名称为探索性数据分析,是为了在特征工程或模型开发之前对数据有个基本的了解。数据类型通常分为两类:连续类型和离散类型,特征类型不同,我们探索的内容也不同。 1. 特征类型 1.1 连续型特征 …