进程(一)(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的,在网上搜了半天都搜不到针对源码的,网上大部分内容都是说怎么配置过滤器和拦截器,怎么使用,并没有对源码进行分析的…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
