进程(一)(22)
1.进程是什么
进程是程序执行的过程,会去分配内存资源,cpu的调度。正在运行的程序叫进程。
并发:同一时刻可以同时完成多个任务。
-
进程: 是操作系统对正在运行的程序的抽象。进程不仅包括程序的代码,还包括程序的执行状态、内存分配、堆栈、寄存器内容等。
-
进程 ID (PID): 每个进程在系统中都有一个唯一的标识符,称为进程 ID,用于区分不同的进程。
-
父进程与子进程: 一个进程可以创建一个或多个子进程。子进程从父进程继承资源和属性,但具有自己的 PID 和独立的执行上下文。
pcb块,是一个结构体,process control block
每个进程在操作系统中都有一个进程控制块(Process Control Block, PCB),用于存储进程的状态和管理信息。PCB 包括以下内容:
-
进程 ID (PID): 唯一标识进程的编号。
-
程序计数器 (Program Counter): 当前正在执行的指令的地址。
-
寄存器状态: 包括 CPU 寄存器的内容。
-
内存管理信息: 进程的地址空间,包括代码段、数据段、堆和栈的起始地址。
-
进程状态: 进程的当前状态(运行、就绪、等待等)。
-
调度信息: 用于进程调度的相关数据,如优先级、调度策略等。
-
文件描述符表: 进程打开的文件及其状态的信息。
-
进程间通信 (IPC) 信息: 进程间通信机制的数据,如信号、消息队列等。
kernal linux内核,cpu一个一个运行
描述一个进程的所有信息
{
PID,进程标识符
当前工作路径 chdir
umask 0002
进程打开的文件列表 文件IO中有提到
信号相关设置 处理异步io,
用户id,组id
进程资源的上限-----ulimit -a,显示资源上限。
Open files 进程打开的文件上限,默认1024。可调
Statck size 栈的大小默认8m,栈一般存放(局部变量,函数参数,返回地址)
}
2.进程和程序的区别?
程序:静态
存储在硬盘中代码,数据的集合(一组指令的有序集合)
进程:动态
程序执行的过程,是动态的,包括进程的创建、调度、消亡
.c ----> a.out-----> process(pid)
1)程序是永存,进程是暂时的(有其生命周期,创建后运行,运行结束后消亡)
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源(进程在运行过程中需要分配和使用系统资源如cpu时间,内存空间等)
5)一个程序可以运行多次,变成多个进程
一个进程可以运行一个或多个程序
程序是进程的静态文本,而进程是程序的动态执行
内存的分布
0-3G,是进程的空间,3G-4G是内核的空间,虚拟地址
虚拟地址 * 物理内存和虚拟内存的地址 映射表 1page=4k mmu
进程的空间分配:内存图(08/19 11:30)

进程分类:
1、交互式进程
2、批处理进程 shell脚本
3、 守护进程
3.进程的作用? 并发,并行区别。
-
资源管理:进程拥有独立的地址空间和资源(如内存、文件描述符),确保各个进程之间的隔离和安全。
-
并发执行:通过创建多个进程,系统可以同时执行多个任务,提高效率和响应能力。
-
调度和管理:操作系统的调度器负责分配 CPU 时间给各个进程,优化系统性能。
-
进程间通信:进程可以通过各种机制(如管道、信号、共享内存等)交换数据和协调工作。
4.进程的状态:
3个状态,就绪→执行态→阻塞(等待,睡眠)基本操作系统
linux中的状态,运行态,睡眠态,僵尸,暂停态。

-
就绪态 (Ready):
-
定义:进程已经准备好运行,等待 CPU 时间片的分配。
-
转换到运行态:当调度器选择该进程并分配 CPU 时间片时,进程从就绪态转换到运行态。
-
-
运行态 (Running):
-
定义:进程正在 CPU 上执行。
-
转换到就绪态:当时间片用完,或者由于其他优先级更高的进程需要 CPU 时,进程会从运行态转换到就绪态。
-
转换到阻塞态:当进程等待某些事件或资源(例如 I/O 操作)时,它会从运行态转换到阻塞态。
-
转换到终止态:当进程完成执行或被终止时,它会从运行态转换到终止态。
-
-
阻塞态 (Blocked):
-
定义:进程在等待某些事件或资源(如 I/O 操作完成)。
-
转换到就绪态:当等待的事件发生,资源变得可用时,进程会从阻塞态转换到就绪态。
-
-
挂起态 (Suspended):
-
定义:进程被暂停或挂起,通常由系统管理员或操作系统主动进行。
-
转换到就绪态:当进程从挂起状态恢复时,通常会转换回就绪态,以便等待 CPU 时间片的分配。
-
转换到终止态:如果进程在挂起期间被终止,它会直接转换到终止态。
-
-
终止态 (Terminated):
-
定义:进程已完成执行,所有资源都被释放。
-
僵尸状态:在进程终止后,如果父进程尚未读取其退出状态,进程会先进入僵尸状态。
-
转换到已退出状态:父进程读取了退出状态后,进程会从僵尸状态转换到已退出状态,进程表条目最终会被清除。
-
5.进程的调度,进程上下文切换
内核主要功能之一就是完成进程调度, 硬件,bios,io,文件系统,驱动
调度算法, other,idle
rr,fifo
宏观并行
微观串行
-
进程调度:决定哪个进程在何时运行。主要策略包括:
-
时间片轮转 (Round Robin):每个进程分配固定时间片,时间片用完后调度下一个进程。
-
优先级调度 (Priority Scheduling):高优先级进程优先执行。
-
多级反馈队列 (Multilevel Feedback Queue):动态调整进程优先级,以优化系统响应和吞吐量。
-
-
上下文切换:在两个进程间切换时保存和恢复状态。步骤包括:
-
保存当前进程状态:包括寄存器值、程序计数器、堆栈指针等。
-
加载新进程状态:恢复新进程的寄存器值和其他状态信息。
-
更新调度信息:调整进程队列和状态。
-
6.查询进程相关命令
1.ps aux
查看进程相关信息
1.就绪态、运行态 R
2.睡眠态、等待态
可唤醒等待态 S
不可唤醒等待态 D
3.停止态 T
4.僵尸态 Z
5.结束态
2.top
根据CPU占用率查看进程相关信息
3.kill和killall发送一个信号
kill -2 PID
发送信号+PID对应的进程,默认接收者关闭(ctrl+c)
killall -9 进程名
发送信号 进程名对应的所有进程
强制终止进程,无法被捕获或忽略,进程不会进行清理。
用法:kill -9 PID
killall a.out
1.fork();
pid_t fork(); 叉子
一次调用,会返回两次。
-
返回值:
-
父进程: 返回新创建子进程的进程 ID (PID)。
-
子进程: 返回 0。
-
出错: 如果
fork调用失败,返回 -1,且设置errno以指示错误类型。 -
进程复制:
-
fork创建一个与父进程几乎完全相同的子进程。包括进程的代码、数据、打开的文件描述符等。然而,子进程有自己独立的地址空间和 PID。
-
-
子进程先运行和是父进程先进程,顺序不确定。
变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
功能:通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
子进程与父进程具有相同的代码逻辑。
返回值:int 类型的数字。
在父进程中:成功 返回值是子进程的pid号 >0
失败 返回-1;
在子进程中:成功 返回值 0
失败 无
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>int main(int argc, char *argv[])
{pid_t ret = fork();if(ret>0){//fatherwhile(1){printf("发送视频\n");sleep(1);}}else if(0 == ret){//childwhile(1){printf("接受控制\n");sleep(1);}}else {perror("fork error\n");return 1;}return 0;
}
面试题: 一次fork生成几个进程?他们之间的关系是什么样的?
如果两次fork同时前后执行,会生成几个进程?他们之间的
关系如何表示,有多少个子进程,有没有孙进程?
2.getpid
pid_t getpid(void);
功能:
获得调用该函数进程的pid
返回值
-
返回当前进程的进程 ID(
pid_t类型),如果调用成功。 -
在错误情况下(通常不会发生),返回
-1,并设置errno来指示错误类型,但getpid函数通常不会失败。
主要用途
-
获取当前进程的 PID:可以用来识别和管理当前进程。
-
进程间通信:进程可以使用其 PID 与其他进程通信或管理资源。
-
调试和日志:获取进程 PID 以便于在调试和日志记录中跟踪进程的行为。
3.getppid
pid_t getppid(void);
功能:
获得调用该函数进程的父进程pid号
返回值:
返回父进程id号
fork函数之后的数据处理互不影响,getpid,getppid函数使用
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
int a = 20;
int main(int argc, char *argv[])
{pid_t ret = fork();if(ret>0){//fathersleep(3);printf("father is %d pid %d ,ppid:%d \n",a,getpid(),getppid());}else if(0 == ret){//childprintf("child a is %d\n",a);a+=10;printf("child a is %d pid:%d ppid:%d\n",a,getpid(),getppid());}else {perror("fork error\n");return 1;}printf("a is %d pid:%d\n",a,getpid());return 0;
}
fork()&&fork()||fork();

应用场合:
1)一个进程希望复制自己,使父子进程同时执行同的代码段。网络服务中会比较多见。
2)一个进程需要执行一个不同的程序。fork+exec
相关文章:
进程(一)(22)
1.进程是什么 进程是程序执行的过程,会去分配内存资源,cpu的调度。正在运行的程序叫进程。 并发:同一时刻可以同时完成多个任务。 进程: 是操作系统对正在运行的程序的抽象。进程不仅包括程序的代码,还包括程序的执行状态、内存…...
Excel“取消工作表保护”忘记密码并恢复原始密码
文章目录 1.前言2.破解步骤3. 最终效果4.参考文献 1.前言 有时候别人发来的Excel中有些表格不能编辑,提示如下,但是又不知道原始密码 2.破解步骤 1、打开您需要破解保护密码的Excel文件; 2、依次点击菜单栏上的视图—宏----录制宏…...
WPS关闭后,进程依然在后台运行的解决办法
问题 wps启动后 在启动wps后,什么都不做,打开进程管理器,发现居然运行了3个wps进程: win10只会显示wps进程: win11显示比较准确: 关闭后 在关闭wps,再去任务管理器查看,发现在…...
SQL每日一练-0816
今日SQL题:计算每个项目的年度收入增长率 难度系数:🌟☆☆☆☆☆☆☆☆☆ 1、题目要求 计算每个项目每年的收入总额,并计算项目收入环比增长率。找出每年收入增长率最高的项目。输出结果显示年份、项目ID、项目名称、项…...
直方图均衡化
概念 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法,通过拉伸像素强度分布范围来增强图像对比度。 原理 均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布),从而令强度值分布会在整个范围内…...
Golang | Leetcode Golang题解之第342题4的幂
题目: 题解: func isPowerOfFour(n int) bool {return n > 0 && n&(n-1) 0 && n%3 1 }...
数学建模学习(116):全面解析梯度下降算法及其在机器学习中的应用与优化
文章目录 1.梯度下降简介1.1 梯度下降的数学原理1.2 学习率的选择2 梯度下降变体3.梯度下降优化器3.1 动量法(Momentum)3.2 AdaGrad3.3 RMSprop3.4 Adam3.5 Python 使用不同优化器训练线性回归模型4.案例:使用梯度下降优化加利福尼亚房价预测模型4.1. 数据准备4.2. 模型训练…...
[mysql][sql]mysql查询表大小
select table_schema as 数据库, table_name as 表名, table_rows as 记录数, truncate(data_length/1024/1024, 2) as 数据容量(MB), truncate(index_length/1024/1024, 2) as 索引容量(MB) from information_schema.tables where 11 and table_schemadb001 order by table_ro…...
8.16 mysql主从数据库(5.7版本)与python的交互及mycat
mysql数据库基本操作: [rootm ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 解压压缩包 [rootm ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootm ~]# cp -r mysql-5.7.44-lin…...
项目问题 | CentOS 7停止维护导致yum失效的解决办法
目录 centos停止维护意味着yum相关源伴随失效。 报错: 解决方案:将图中四个文件替换掉/etc/yum.repos.d/目录下同名文件 资源提交在博客头部,博客结尾也提供文件源码内容 CentOS-Base.repo CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.rep…...
【Docker】Docker Compose(容器编排)
一、什么是 Docker Compose docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了 Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。 docker-compose 中有两个非常重要的概念&…...
嵌入式初学-C语言-二九
C语言编译步骤 预处理编译汇编链接 什么是预处理 预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成,当源文件在编译时,编译器会自动调用预处理指令的解析…...
0x03 ShowDoc 文件上传漏洞(CNVD-2020-26585)复现
参考:ShowDoc文件上传漏洞(CNVD-2020-26585)_showdoc漏洞-CSDN博客 一、fofa 搜索使用该工具的网站 网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统 "S…...
【大模型从入门到精通34】开源库框架LangChain 利用LangChain构建聊天机器人1
这里写目录标题 利用LangChain构建聊天机器人介绍介绍对话型聊天机器人构建环境环境变量和平台设置 加载文档和创建向量存储高级检索技术对话上下文和记忆纳入聊天历史会话缓冲内存 构建对话检索链环境设置与API密钥配置选择合适的语言模型版本Q&A系统设置 利用LangChain构…...
魔法糖果工厂
LYA 是一家魔法糖果工厂的新任管理员。工厂生产的魔法糖果有七种颜色,分别用字母 a、b、c、d、e、f、g 表示。这些糖果被排列在一条传送带上,准备进行包装。为了提高效率,工厂引进了一台智能包装机器人。这个机器人可以按照预设的指令序列来包…...
NVM安装管理node.js版本(简单易懂)
一、前言 1.1 简介 NVM(Node Version Manager)是 node.js 的版本管理器,用 shell 脚本切换机器中不同版本的 nodejs。 Nodejs为什么需要多个版本? 有经验的开发者可能遇到过,某个依赖包明确nodejs是某个版本&#…...
第1章-04-Chrome及Chrome Driver安装及测试
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师&am…...
【Linux】SSH 隧道转发场景搭建
ssh建立隧道转发 A设备:没有公网IP地址的本地设备,如本地内网服务器(需要能通公网) B设备:有公网IP地址的服务器,可以是云服务器 C设备:终端设备,想通过公网服务器B访问到设备A 要…...
前后端部署-服务器linux中安装数据库Mysql8
一、登录Xshell7 && 开放Mysql 3306端口, Redis 6379 端口 二、手动部署MySQL数据库 1.运行以下命令,更新YUM源。 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 2.运行以下命令,安装My…...
如何使用jd-gui对springboot源码进行分析
背景: 最近在学习springboot的过滤器和拦截器,想了解一下过滤器和拦截器是怎么匹配URL的,在网上搜了半天都搜不到针对源码的,网上大部分内容都是说怎么配置过滤器和拦截器,怎么使用,并没有对源码进行分析的…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
