Linux 进程(一)
1 操作系统
概念:任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

1.1 管理概念
在计算机开启后,第一个被加载的软件就是操作系统。根据上图可以看出操作系统与底层硬件之间还有着各种驱动,操作系统对驱动做管理,驱动再对底层硬件做管理(不包括特殊情况)。
首先我们要谈的第一个问题就是管理,操作系统是如何管理下层的软硬件呢?
我们类比校园中的校长和学生的关系,来解释操作系统和底层硬件的关系。
校长在管理偌大的学校的时候,并不会和每一个学生见面,也并不会深入的了解到每一个学生,那么,学生中的,张三,李四 ... .... 挂科太多被校长开除了,这是为什么呢?因为校长拿到了他们各科成绩的数据!在这种情况下,校长就属于管理者,张三,李四 ... ....属于被管理者。
此时我们能得出第一条信息,就是管理者和被管理者并不需要见面。管理者的核心工作是做决策,做决策是根据数据来做。
那么校长又是如何拿到数据的,通过辅导员拿到数据。在开学的第一天你就要填写各种表上交你的信息。
面对这些庞大的数据,校长通过辅导员收集上来的表来获取每个学生的信息,表格中的每一项属性都是学生说具有的,只是每个学生的数值是不一样的。
学校中的学生成千上万,校长的工作也从管理学生,变成管理学生的信息。
此时校长恰好是程序员出身,用学生的属性定义为一个结构体,然后每个结构体里面都有一个指针,指向下一个结构体。校长需要c语言成绩最好的,谁跑步最快的,谁挂科最多,都可以在这张链表中查,当有田径会校长通过查链表就知道派谁去,当考试完成后校长通过查链表就知道,该让谁滚蛋(滚蛋后校长就把该同学的节点删除),这样通过管理数据管理链表,就能实现对学生的管理。校长的工作也就变成对链表的增删查改!

从上面的分析,我们可以得出。管理者是根据数据做决策,管理者拿到数据通过次级管理者,管理者对人的管理转化成对数据管理。

我们不妨可以将操作系统看作校长,驱动程序看做辅导员,底层硬件看作学生。操作系统对底层硬件的管理就变成对底层硬件的数据做管理,数据通过驱动程序得到。我们将所有硬件所具有的所有属性定义成为一个结构体,然后每个硬件所具有的独特的属性在他的节点内进行描述!!最后通过指针链接形成链表(简单理解为链表),最后将链表给到操作系统!
以上操作系统的管理行为成为:先描述,在组织!
1.2为什么要有操作系统
设计OS的目的:
与硬件交互,管理所有的软硬件资源(对下),
为用户程序(应用程序)提供一个良好的执行环境(对上)
良好是指的稳定、安全、高效的。

当我们再来看这张图的时候就会发现,从最顶端的用户开始,的箭头依次向下。那么能直接访问操作系统,或者程序驱动,或者底层硬件吗?
不能!!!每个用户都是一个独立的个体!如果任由他们任意的访问操作系统内部!那么其他的用户数据的安全性如何保障!!! 并不是所有的用户和开发者都能够正确的访问驱动和底层硬件的(这些硬件也只有生产该硬件的厂商知道怎么用最好的方式去访问),所以用户和开发者访问就有了一定的成本。操作系统的出现统一了驱动的管理形式。降低了开发者的使用成本,使开发变得更加高效。同时也能使计算机变得更加稳定。
对于用户来说操作系统也为其准备了系统调用接口,在系统调用之上,也有库函数、shell外壳之类的。更加便捷了用户的访问。
2 进程
概念:
我们先给出概念:进程 = 内核数据结构 + 可执行程序。
或者说 进程 = 内核PCB对象 + 可执行程序。
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性(结构体)的集合。
课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct。
task_struct-PCB的一种
在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。
存在着这样的一个事实,我们可以同时打开qq,微信,王者荣耀。这些程序都在运行着,根据冯诺依曼体系结构,程序需要先被加载到内存上,然后才能被cpu所运行。那么操作系统需不需要管理可执行程序呢?可能是需要的!!操作系统是怎么管理呢?根据我们以上所得出来的结论,是先描述,再组织的!!
那么为什么可执行程序加载到内存后,变成进程,我们要给每一个进程形成一个PCB对象呢?
因为操作系统需要管理。


从上面的结构体可以简单的看出PCB是怎么对进程描述以及组织的。
如果把头节点给到cpu,那么进程就可以跑就起来了。

这个标识符就是pid 那么我们怎么在Linux下看到pid呢。
通过下面两个指令:


写一段死循环:

写出来的死循环效果如下:

每个进程的创建都有对应的pid ,那么我们该如何看到pid呢?
指令:
while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1 ;done

这一串指令就可以查看到当前运行程序的PID了: 
那么如何证明这个pid 就是当前进程的pid呢?
修改代码:

#include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 int main()5 {6 7 pid_t id = getpid();8 pid_t fid = getppid();9 10 11 while(1)12 {13 sleep(1);14 printf("i am a process,ppid:%d,pid:%d\n",fid,id); 15 }16 return 0 ;17 }
由此我们可以发现:这就是进程中的标示符:也就是我们要找的pid

相关文章:
Linux 进程(一)
1 操作系统 概念:任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括 内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(例…...
vue中的keep-alive详解与应用场景
🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-keep-alive 目录 一、Keep-alive 是什么 二、使用场景 三、原理分析 四、案例实现 activa…...
软件设计师——程序设计语言基础(一)
📑前言 本文主要是【程序设计语言基础】——程序设计语言基础的相关题目,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#…...
Apache简介与安装
先导概念: 静态网站: 最早的建站方式,每个页面都是一个独立的文件,需要手动上传或编辑。网页内容固定不变。例如,个人博客、静态企业官网等。 动态网站: 网站内容可根据不同情况动态变更,一般通过数据库进行架构。包含服务器端脚本,可以实现更丰富的功能。例如,社…...
set与map
set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair(1)构造函数(2)作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map…...
基于单片机智能液位水位监测控制系统
**单片机设计介绍, 基于单片机智能液位水位监测控制系统 文章目录 一 概要特点应用场景工作原理实现方式 系统功能实时监测控制调节报警功能数据记录与分析 总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 ## 系统介绍 基于单片机…...
C#,《小白学程序》第十七课:随机数(Random)第四,移动平均值(Moving Average)的计算方法与代码
1 文本格式 /// <summary> /// 《小白学程序》第十七课:随机数(Random)第四,移动平均值的计算方法与代码 /// 继续学习数据统计,移动平均值的计算方法 /// 移动平均值就是一定步长内数值的平均值,用…...
行情分析——加密货币市场大盘走势(11.29)
大饼已经形成了底背离,即MACD往下走,而价格还在往上走,这种后续往往会大跌。继续把空单拿好,已经持仓的无需加仓。多次上涨却一直不能突破,说明多空和空军力量都很强,等待后续出方向。在笔者看来࿰…...
C++——string的字符串比较,字符存取,插入和删除和子串
一. string字符串比较 功能描述:字符串之间的比较 比较方式:字符串比较是按字符的ASCII码进行对比 返回 0 > 返回 1 < 返回 -1 函数原型: *int compare(const string &s) const; //与字符串s比较 *int compare(const char *s) const; //…...
字节10年经验之谈 —— 从0到1开发自动化测试框架!
一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…...
Mysql(基本介绍+下载安装+服务器+基本使用+建库建表+navicat/mybitas工具+外键及实例)
一、Mysql基本介绍 当谈论MySQL时,通常指的是一个流行的开源关系型数据库管理系统(RDBMS)。MySQL是由瑞典的开发者在1995年创建的,后来被Sun Microsystems收购,最终成为Oracle Corporation的一部分。以下是关于MySQL的…...
Python+requests+Jenkins接口自动化测试实例
在做功能测试的基础上,我平时也会用postman测试接口,不过postman只能测试一个一个接口,不能连贯起来,特别是我们公司的接口很多都是要用到token的,导致我每次测个需要登录的接口都要去获取到token,做了很多…...
SpringBoot3核心原理
SpringBoot3核心原理 事件和监听器 生命周期监听 场景:监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…...
JS常用数据类型转换(数字型和字符串型之间转换)
提供了5中基本数据类型:数字 number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 常用的是数字型和字符串型之间的转换,常用的转换方法如下: 1 数字型转换成字符串型 a) 使用String()方法…...
算法通关村第一关—青铜挑战—用Java基本实现各种链表操作
文章目录 第一关—链表【青铜挑战】1.1 单链表的概念1.2 链表的相关概念1.3 创建链表 - Java实现1.4 链表的增删改查1.4.1 遍历单链表 - 求单链表长度1.4.2 链表插入 - 三种位置插入(1)在链表的表头插入(2)在链表的中间插入&#…...
SparkRDD及算子-python版
RDD相关知识 RDD介绍 RDD 是Spark的核心抽象,即 弹性分布式数据集(residenta distributed dataset)。代表一个不可变,可分区,里面元素可并行计算的集合。其具有数据流模型的特点:自动容错,位置…...
嵌入式设备与PC上位机通信协议设计的几点原则
嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种: 从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。 一&am…...
Go 内置运算符
一、算数运算符 1、算数运算符使用 package mainimport ("fmt" )func main(){fmt.PrintIn("103",103) //10313fmt.PrintIn("10-3",10-3) //10-37fmt.PrintIn("10*3",10*3) //10*330//除法注意:如果运算的数都是…...
Table和HashBasedTable的使用案例
------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…...
【执行批处理后 executeBatch() 没反应,一个参数相信就能搞定】
一、场景是在使用EasyExcel读取全表时,每次手动提交事务6w多条,总计190w数据量的情况下发生的。 博主比较fw,卡住了两天😶 此问题还有一个比较bug的地方,就是当你在 executeBatch() 上下打断点时还能够执行出来&…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
IP选择注意事项
IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时,需要考虑以下参数,然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...
React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍&#x…...
