当前位置: 首页 > news >正文

【Linux系统编程】进程概念与基本创建

文章目录

  • 1. 进程的概念
  • 2. 进程描述—PCB
  • 3. task_struct—PCB的一种
  • 4. task_ struct内容分类
  • 5. 查看进程

这篇文章我们来学习下一个概念——进程

1. 进程的概念

那什么是进程呢,我们该如何理解它呢?

如果我们打开电脑的任务管理:

在这里插入图片描述
我们看到这里面就展示了当前正在运行的进程,那大家看这其实就是我们当前打开的程序嘛

所以,我们给出一个结论:

我们以前任何启动并运行程序的行为,都是由操作系统帮助我们将程序转化为进程,来完成特定的任务。

那说到底进程到底是什么呢?我们继续来探讨探讨:

大家看这张图在这里插入图片描述
那我们平时自己写好的可执行程序,我们知道它本质其实就是一个二进制文件嘛
那我们运行这个可执行程序,首先它被载入内存,其实就是把可执行程序里面的指令和数据加载到内存。
在这里插入图片描述
那此时它就变成一个进程了吗?
大家想一个问题,一个社会人进入到你的学校,他就是你们学校的一名学生了吗?
不是的。
那同样的,一个可执行程序或应用程序被加载到内存里面,他就变成了被操作系统管理的进程了吗?
好像也有点不合理。
那一个人如何才算你们学校的学生呢?
是不是它的学籍要在你们学校里,它的信息要在你们学校的教务管理系统上,这才是最关键的。
然后第二个问题,我们可能同时运行多个程序,那他们都要加载到内存里,就好比学校里面有好多学生,那学校肯定要对这么多学生进行一个良好的管理。
那同样的,操作系统也要对加载到内存的多个进程进行管理。

那如何进行管理呢?

很简单,还是我们之前说的——先描述,再组织

2. 进程描述—PCB

那如何描述进程呢?

进程信息被放在一个叫做进程控制块(PCB)的数据结构中,可以理解为进程属性的集合。
PCB是进程存在的唯一标识。
课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

所以:

我们每运行一个程序,除了要把它对应的指令和数据加载到内存,操作系统还会为它创建一个PCB来记录和管理进程信息
那操作系统要管理这么多的进程,就可以把所有进程的PCB用一个数据结构比如链表管理起来(再组织)
在这里插入图片描述
那此后操作系统对于进程的管理就变成了对组织PCB的数据结构的管理

所以,回到我们上面说的:

一个程序被加载到内存,他就是进程了吗?
不是的
进程包括了程序加载到内存中的指令和数据,以及内核中与之关联的进程控制块(PCB)

所以,我们这里给出一个进程的概念:

进程=程序加载到内存中的指令和数据+内核中与之关联的进程控制块(PCB)
此外:
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体。

3. task_struct—PCB的一种

在Linux中描述进程的结构体叫做task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

4. task_ struct内容分类

task_ struct里面包含了以下内容:

标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息

可以在内核源代码里找到它,所有运行在系统里的进程都以task_struct链表的形式存在内核里。

然后呢我们上面提到:

可执行程序其实就是一个文件嘛,而文件的话我们说过文件=内容+属性
那程序运行载入到内存里面的指令和数据这毫无疑问肯定是文件的内容。
然后呢我们有提到每个进程操作系统都会创建一个PCB来描述进程,可以理解为PCB就是进程的属性集合。

那请问这里的PCB即进程属性的结合跟可执行文件的属性有没有关系呢?

其实呢有关系,但是关系不大。
磁盘上文件的属性一般就是文件名、文件类型,位置,占用空间这些东西。
而PCB呢,它是由操作系统动态创建和维护的一种内核数据结构,它里面包含的进程的属性都是操作系统自己获取和记录的,跟文件的属性不是一回事,没什么关系。
其实也稍微有点关系,后面会带大家看。

5. 查看进程

那如何查看进程呢?

首先,我们先来写一个代码和makefile:

在这里插入图片描述
编辑一下myprocess.c
在这里插入图片描述
保存退出
然后我们把makefile写一下:
在这里插入图片描述

然后:

我们make一下
在这里插入图片描述
就生成了一个可执行程序myprocess
那我们./执行这个可执行程序,操作系统就会把它加载到内存,同时为他建立PCB(在Linux上是task_struct),然后它就变成了进程
在这里插入图片描述

那我们如何查看这个进程呢?

在这里插入图片描述
让这个进程继续跑着,我们再打开一个渠道
然后我们输入一条命令
在这里插入图片描述
就可以看到我们刚才运行起来的进程
简单解释一下这条命令(这里的命令我们后面会讲)
ps axj | head -1 && ps axj | grep myprocess
这是是逻辑与连接了两条命令,首先ps axj可以显示当前系统中所有进程的详细信息,但是我们不想看所有的,所以管道连接head -1就是去只显示ps axj展示出来的所有信息的第一行(即那个表头信息),然后&&后面又连接一条指令,其实就是过滤取出关键字myprocess对应的进程信息
然后下面那个大家可以不用管,它是因为grep这个也是一个进程,也被过滤出来了
当然可以把它屏蔽掉
在这里插入图片描述
就只剩我们的这一个了
那然后我们再打开一个渠道
在这里插入图片描述
也把这个程序运行起来
然后
在这里插入图片描述
我们就可以观察到两个了

然后我们来观察一下显示的信息:

在这里插入图片描述
我们看到有个PID,就是我们上面提到的进程的唯一标识符。
它们两个是不一样的,所以它们两个是不同的两个进程,虽然是同一个可执行程序运行生成的。

那除了上面查看进程的方式,还有其它方法:

我们还可以通过 /proc 系统文件夹查看进程信息
在这里插入图片描述
proc其实就是process的缩写嘛
/proc 目录是 Linux 系统中的一个特殊目录,提供了有关当前运行进程和内核状态的信息。
需要注意的是,它跟普通的文件不一样,它不是一个真正的文件系统,而是通过内核在内存中维护的一个虚拟文件系统。只有当操作系统启动的时候,它才会存在,并不存在于磁盘上。
但是这里我们好像没有看到process。

这里有很多数字,代表什么呢?

🆗,这些数字其实是特定进程的PID,我们是能找到上面我们两个process进程的PID的
在这里插入图片描述
这些数字是蓝色的,我们知道蓝色表示它是一个目录/文件夹。
所以:
一个进程被创建好,操作系统会自动在proc目录下创建一个以新增进程的PID命名的文件夹
在这里插入图片描述

我们可以进去看看

在这里插入图片描述
这里面有很多内容,这些内容其实就是当前进程的相关属性信息
这些东西大多我们还看不懂,但是
在这里插入图片描述
大家看这两个,不就是对应程序的路径吗。
那着就是我们前面说的进程的属性跟文件的属性也稍微有一点关系

那然后:

在这里插入图片描述
我们当前是在proc里面这个进程PID对应的这个目录里面的,上面说了PID对应的目录是进程创建的时候才会在proc目录下新增的。
那如果我们把对应的进程终止(CTRL+c)掉
在这里插入图片描述
在想查看这个目录的内容就不行了
在这里插入图片描述
上一级我们也回不去了。
因为进程终止,操作系统就会在proc目录下把这个进程PID对应的目录及其里面的内容删除掉。所以proc目录里面的内容是动态变化的。

这篇文章就先到这里,下一篇文章我们继续讲解进程相关的内容…
在这里插入图片描述

相关文章:

【Linux系统编程】进程概念与基本创建

文章目录 1. 进程的概念2. 进程描述—PCB3. task_struct—PCB的一种4. task_ struct内容分类5. 查看进程 这篇文章我们来学习下一个概念——进程 1. 进程的概念 那什么是进程呢,我们该如何理解它呢? 如果我们打开电脑的任务管理: 我们看到这…...

webpack:详解CopyWebpackPlugin,复制的同时修改文件内容

摘要 CopyWebpackPlugin 是一个强大的 Webpack 插件,用于将文件从源目录复制到构建目录。在本文中,我们将探讨 CopyWebpackPlugin 的一些常用 API,并提供示例代码。 在构建 Web 应用程序时,通常需要将一些静态文件(如…...

Twin-Builder—系统级多物理域数字孪生平台

Twin Builder是ANSYS公司系统仿真业务的核心产品,是一款跨学科多领域系统仿真软件和数字孪生平台。能够实现复杂系统的建模、仿真和验证,基于IIoT物联网平台对数字孪生体进行集成、部署与运行,在完成复杂系统功能、性能的验证和优化的同时&am…...

用selenium和xpath定位元素并获取属性值以及str字符型转json型

页面html如图所示: 要使用xpath定位这个div元素,并且获取其属性data-config的内容值。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Optionshost127.0.0.1 port10808 …...

基于Java的电影院管理系统设计与实现

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...

Linux Static Key原理与应用

文章目录 背景1. static-key的使用方法1.1. static-key定义1.2 初始化1.3 条件判断1.4 修改判断条件 2、示例代码参考链接 背景 内核中有很多判断条件在正常情况下的结果都是固定的,除非极其罕见的场景才会改变,通常单个的这种判断的代价很低可以忽略&a…...

linux ssh 禁止指定用户通过ssh登录

Linux 禁止用户或 IP通过 SSH 登录 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下&#xff1a…...

快速学习Netty

Netty框架探索:助力高效网络编程 一、Netty是个啥?二、“Hello World”服务器端实现(Server)客户端实现(Client)思考🤔 三、Netty的核心组件EventLoopChannelChannelPipelineChannelHandlerByte…...

对类和对象的详细解析

目录 1.类的构成 2.this指针 3.C类里面的静态成员 3.1 类里面的静态成员函数 3.2 类里面的静态成员变量 静态成员变量的特点 共享性 存储位置 生命周期 访问权限 如何初始化? 构造函数 1.类的构成 public修饰的成员在类外可以直接被访问 private和protecte…...

matlab 间接平差法拟合二维圆

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 圆的方程为: ( x - x 0 )...

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名,Photo_ID用来统计当下是第几张拼图,Squares储存当下拼图的24张小拼图的文件名,Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…...

glog与pugi::xml使用方法

(一)glog的使用:google logging的简称; 1)需要安装,网上一搜一大堆,不在赘述; 2)在cmakelists.txt中,需要链接"-glog",如&a…...

windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”,可以参考以下方法。 我的电脑上安装了双版本MySQL,这里…...

剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。…...

嵌入式笔试面试刷题(day15)

文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟…...

【Docker】Dockerfile构建镜像

一、编写Dockerfile文件 编写镜像需要的运行环境(Linux、java等), Dockerfile文件内容如下: # 使用官方的 Ubuntu 16.04 镜像作为基础镜像 FROM ubuntu:16.04# 更新包列表 RUN apt-get update# 安装所需的软件包 RUN apt-get ins…...

fota升级,可卸载apk也进行更新

首先如题目要求 可卸载apk是通过刷机或恢复出厂设置之后执行脚本安装的 然后fota升级后,在判断是否“是第一次刷机和恢复出厂设置”时候会返回false,就导致脚本没有执行。导致apk升级不成功 所以我们要完成这个就是,确定fota什么时候升级完…...

ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码

技术架构:ASP.NET dotnet 3.5 LIMS作为一个信息管理系统,它有着和ERP、MIS之类管理软件的共性,如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产,最大限度地发挥现有设备、资源、人、技术的…...

2023!6招玩转 Appium 自动化测试

Appium是个什么鬼 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页…...

WireShark抓包分析TCP三次握手过程,TCP报文解析

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...

【C语言】指针和数组笔试题解析

大家好,我是苏貝,本篇博客带大家了解指针和数组笔试题解析,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...

Vue的模板语法(下)

一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符, .stop, .prevent,.capture,.self,.once .stop:阻止事件冒泡。当一个元素触发了事件,并且该元素包含嵌套的父元素时&#…...

Zookeeper客户端——I0Itec-zkClient

dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问题。 1)ZooKeeper的Watcher是一次性的,用过了需要再注册; 2) session的超时后…...

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性

背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…...

hashmap使用

hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了,而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器(Iterator)EntrySetpublic static void main(String[] args) {// 创建并赋…...

Centos7配置国内yum源

目录 备份原系统中的repo文件配置国内开源镜像重新生成yum缓存 备份原系统中的repo文件 cd /etc/yum.repos.d/mkdir repo_bakmv *.repo repo_bak/配置国内开源镜像 到网易和阿里开源镜像站点下载系统对应版本的repo文件 curl -O http://mirrors.aliyun.com/repo/Centos-7.re…...

C#中async/await的线程ID变化情况

一、简单的起步 Console.WriteLine($"主线程开始ID:{Thread.CurrentThread.ManagedThreadId}");//aawait Task.Delay(100);//cConsole.WriteLine($"主线程结束ID:{Environment.CurrentManagedThreadId}");//b 结果: …...

网络安全—黑客技术—自学笔记

目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来…...

功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲

功夫再高也怕菜刀,专业的事情交给专业的人去做。 今年7月份中旬的时候,遇到一位老朋友,向我咨询某公司的信息,其实我根本不了解这家公司的情况与实力,向他说了,抱歉,我查下,等我晚上…...

numpy的多项式函数: `poly1d`

Python numpy.poly1d() numpy.poly1d()函数有助于定义一个多项式函数。它使得在多项式上应用 "自然操作 "变得容易。 语法: numpy.poly1d (arr, root, var) 参数 : arr : [array_like] 多项式系数按照幂的递减顺序给出。如果第二个参数(根)被…...

温州做模具的网站/山东最新资讯

实例说明代理是Java SE 1.3版新增的特性。使用代理可以在程序运行时创建一个实现指定接口的新类。通常只有在编译时无法确定需要使用哪个接口时才需要使用代理,这对于应用程序员很少见。对于系统程序员而言,代理可以为工具类提供更加灵活的特性。本实例模…...

减肥药做网站营销/seo优化操作

本文使用JSON.NET这个组件 DataTable dt XXx.GetData(); var _list dt.AsEnumerable().Skip((pageindex - 1) * pagesize).Take(pagesize); 在此如果真接使用JSON.NET组件转换,如下代码: JsonConvert.SerializeObject(_list ) ; 生成的JSON串中有一些没…...

广州网站建设推广易尚/谷歌三件套下载

再谈区块链在积分领域的应用 路云区链 | 31. Aug, 2016 | 3 次阅读 传统积分应用存在的问题 负债型积分总体问题: 1、具有零散、消费乏力、使用限制多、兑换繁琐、难以流通的特点。如A商家“发行”的积分,B商家不给予通兑。 2、同时,…...

哈尔滨网站制作哪儿好薇/广告推广平台

升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。 请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -…...

wordpress慢 数据库/seo网站优化助理

本文简介decorator模块是 Michele Simionato 为简化python的decorator的使用难度而开发的,使用它,您可以更加容易的使用decorator机制写出可读性、可维护性更好的代码。本文大部分翻译自下面这篇文档: www.phyast.pitt.edu/~micheles/python/documentati…...

备案变更网站/安卓手机优化软件排名

记录一下自己安装VS2010与Opencv的配置过程,方便以后查看使用,开发环境的搭建: 1. 下载安装Opencv,去官网http://opencv.org/即可下载最新版本的Opencv,此处用的是Opencv 2.4.10 安装时傻瓜式的,最新版本的…...