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

【Linux系统编程】进程概念,进程状态

目录

一,操作系统(Operator System)

1-1概念

1-2设计操作系统的目的

1-3核心功能

1-4系统调用和库函数概念 

二,进程(Process)

2-1进程概念与基本操作

 2-2task_struct结构体内容

2-3查看进程

2-4通过系统调用创建进程 

三,进程状态

 运行状态(running)

阻塞状态(sleeping)

挂起状态

z(zombie)僵尸状态

僵尸进程危害

孤儿进程


一,操作系统(Operator System)

1-1概念

任何计算机内部都包含一个基本的程序集合,成为操作系统(OS)。

操作系统包括:

  • 内核(进程管理,进程调度,文件管理,驱动管理等)
  • 其他程序(例如函数库,shell程序等)

1-2设计操作系统的目的

对下,与硬件交互,管理所有的软硬件资源

对上,为用户程序(应用层程序)提供一个良好的执行环境

1-3核心功能

操作系统“管理”硬件。

如何管理:

  • 先描述起来,用struct结构体描述信息
  • 再组织,用链表或者其他高效的数据结构将struct对象组织起来

1-4系统调用和库函数概念 

在开发角度,操作系统对外会表现为一个整体,但是会暴露自身的部分接口,供上层开发使用,这部分由操作系统提供的接口,称为系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对较高,所以,有心的开发者会对部分系统调用做封装,从而形成库,有了库,就很方便上层用户和开发者进行二次开发。

二,进程(Process)

2-1进程概念与基本操作

概念:进程是指程序的一个执行实例,正在执行的程序等。

内核层面概念:每个进程拥有独立的内存空间,系统资源和执行状态,是操作系统进行资源分配和调度和核心对象。

操作系统描述进程的的数据结构—PCB(process control block)

PCB基本概念:进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

  • 在Linux操作系统下的PCB是:task_struct
  • task_struct是Linux内核的⼀种数据结构,它会被装载到RAM(内存)⾥并且包含着进程的信息。

进程=内核数据结构+自己的代码和数据。

进程=task_struct+自己的代码和数据。 

同一时刻,可能会有多个可执行程序被加载到内存,而操作系统要对这些可执行程序进行管理, 在操作系统层面上,就会在内部会建立一个task_stuct 对象,里面保存了该可执行程序的代码地址,数据地址等各种信息。将这些task_struct使用链表或者其他数据结构管理起来,那么操作系统对进程的管理就转化为对链表的管理。

 2-2task_struct结构体内容

  • 标识符:描述本进程的唯一标识符,用来区别其他进程
  • 状态:任务状态,退出码,退出信号等。
  • 优先级:相对于其他进程的优先级
  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执⾏时处理器的寄存器中的数据
  • IO状态信息: 包括显⽰的IO请求,分配给进程的IO设备和被进程使用的文件列表。
  • 其他信息......

2-3查看进程

1,进程的信息可以通过/proc系统文件夹查看

如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。

2,大多数进程信息同样可以使用top和ps这些用户及工具来获取

ps aux  #显示所有进程信息

top  #动态查看进程资源占用

3,通过系统调用获取进程标识符 

系统调用

getpid()   #当前进程ID(PID)

getppid() #父进程ID(PPID)

 

2-4通过系统调用创建进程 

  • fork有两个返回值
  • 父子进程共享代码,数据格子开辟空间,私有一份(采用写时拷贝)
  • fork之后通常要用if进行分流

创建一个子进程,将父进程的task_struct会拷贝一份给子进程,但是会有部分的数据时需要修改的,比如进程的唯一标识符pid。子进程会共享父进程的代码数据,相当于发生了浅拷贝。

 pid_t pid = fork();
if (pid == 0) {
    // 子进程代码
} else {
    // 父进程代码
}

三,进程状态

操作系统中会存在多个进程。每个进程可能会存在不同的状态,有的进程正在运行,有的进程正在被调度,有的进程处于挂起等等。CPU要执行这些进程,这些进程的task_struct中会保存指向代码和数据的指针。操作系统会维护一个运行队列(running queue),存放要运行的task_struct,这个队列就叫做调度队列,其中的一个个task_struct就是要被调度的进程。

本质上,进程状态就是task_struct结构体中的一个变量,用来记录当前进程的状态,在操作系统内部通过宏定义的方式,标识不同的状态。

例如,下面的状态在Kernel源代码的定义:

static const char *const task_state_array[] = {

"R (running)", /*0 */

"S (sleeping)", /*1 */

"D (disk sleep)", /*2 */

"T (stopped)", /*4 */

"t (tracing stop)", /*8 */

"X (dead)", /*16 */

"Z (zombie)", /*32 */

};

  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运⾏中要么在运⾏ 队列里。
  • S睡眠状态(sleeping): 可中断休眠,浅度睡眠,就是阻塞状态。该状态下的进程是可以被杀掉的。
  • D(Disk sleep):不可中断休眠,Disk是磁盘的意思。该状态下的进程是无法被杀掉的。比如一些进程在进行IO的时候,是不允许被杀掉的。在这个 状态的进程通常会等待IO的结束。
  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停⽌(T)进程。这个被暂停的 进程可以通过发送 SIGCONT 信号让进程继续运行。
  • X死亡状态(dead):这个状态只是⼀个返回状态,你不会在任务列表里看到这个状态。
  • t(trancing stop):追踪状态,对我们的程序进行debug调试时的状态。打端点,进程就被暂停了。

 运行状态(running)

只要进程在调度队列中,都处于运行状态。

阻塞状态(sleeping)

以scanf为例,当执行scanf从键盘读取数据时,未输入数据时,操作系统会将当前进程的task_struct从调度队列中移除,放入设备的阻塞队列中,此时,该进程就处于阻塞状态。直到键盘响应,会将该进程重新放入调度队列的尾部,继续运行。

挂起状态

在磁盘上,会存在一块特定的分区,叫做swap分区。当内存资源严重不足时,操作系统会将一些不会被调度的进程的代码和数据交换到磁盘的swap分区,在操作系统内部只保留task_struct部分。此时的状态称为挂起状态。

阻塞挂起状态:将阻塞队列中的进程 唤出到磁盘的swap分区上

阻塞运行状态: 将运行队列末端的进程唤出到磁盘的swap分区上

z(zombie)僵尸状态

我们创建子进程的目的,是为了让子进程完成某种工作的。子进程完成后,父进程需要直到完成的信息。所以子进程在执行完后,必须要等待父进程获取它的退出信息,获取之前,该子进程的状态就是Z状态,僵尸状态。

当一个进程结束后,它的代码和数据就会被释放,所以它的退出信息只会保存在task_struct中。

僵尸进程危害

维护退出状态本⾝就是要⽤数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,
换句话说,Z状态⼀直不退出,PCB⼀直都要维护。
那⼀个父进程创建了很多⼦进程,就是不回收,就会造成内存资源的浪费。
因为数 据结构对象本⾝就要占用内存。

孤儿进程

父进程如果提前退出,那么⼦进程后退出,进入Z状态之后,那该如何处理呢?
父进程先退出,子进程就称之为“孤儿进程”。
孤儿进程被1号进程领养,就是要被操作系统领养。此时的子进程会成为后台进程。

相关文章:

【Linux系统编程】进程概念,进程状态

目录 一,操作系统(Operator System) 1-1概念 1-2设计操作系统的目的 1-3核心功能 1-4系统调用和库函数概念 二,进程(Process) 2-1进程概念与基本操作 2-2task_struct结构体内容 2-3查看进程 2-4通…...

第二十八章:Python可视化图表扩展-和弦图、旭日图、六边形箱图、桑基图和主题流图

一、引言 在数据可视化领域,除了常见的折线图、柱状图和散点图,还有一些高级图表类型可以帮助我们更直观地展示复杂数据关系。本文将介绍五种扩展图表:和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示数据关系、层次结构和流量…...

深入理解C++引用:从基础到现代编程实践

一、引用的本质与基本特性 1.1 引用定义 引用是为现有变量创建的别名,通过&符号声明。其核心特点: 必须初始化且不能重新绑定 与被引用变量共享内存地址 无独立存储空间(编译器实现) 类型必须严格匹配 int value 42; in…...

OpenVLA-OFT——微调VLA的三大关键设计:支持动作分块的并行解码、连续动作表示以及L1回归目标

前言 25年3.26日,这是一个值得纪念的日子,这一天,我司「七月在线」的定位正式升级为了:具身智能的场景落地与定制开发商 ,后续则从定制开发 逐步过渡到 标准产品化 比如25年q2起,在定制开发之外&#xff0…...

linux3 mkdir rmdir rm cp touch ls -d /*/

Linux 系统的初始目录结构遵循 FHS(Filesystem Hierarchy Standard,文件系统层次标准),定义了每个目录的核心功能和存储内容。以下是 Linux 系统初始安装后的主要目录及其作用: 1. 核心系统目录 目录用途典型内容示例…...

TDengine 中的视图

简介 从 v3.2.1.0 开始,TDengine 企业版提供视图功能,便于用户简化操作,提升用户间的分享能力。 视图(View)本质上是一个存储在数据库中的查询语句。视图(非物化视图)本身不包含数据&#xff…...

算法设计学习9

实验目的及要求: 通过排序算法的实验,旨在深化学生对不同排序算法原理和性能的理解,培养其分析和比较算法效率的能力。通过实际编程,学生将掌握排序算法的实现方法,了解不同算法的优劣,并通过性能测试验证其…...

PGSQL 对象创建函数生成工具

文章目录 代码结果 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>PGSQL 函数生成器</tit…...

企业安全——FIPs

0x00 前言 先来看一道题目。这道题目涉及到的就是道德规范和互联网相关内容&#xff0c;本文会对相关内容进行描述和整理。 正确答案是&#xff1a;D 注意FIPs的主要目的是为了限制&#xff0c;也就是针对数据的守则。 0x01 RFC 1087 1989年1月 互联网架构委员会 IAB 发布了…...

历年跨链合约恶意交易详解(二)——XBridge20240424攻击

漏洞合约函数 /*** dev token owner can list the pair of their token with their corresponding chain id* param baseToken struct that contains token address and its corresponding chain id* param correspondingToken struct that contains token address and its cor…...

《AI大模型开发笔记》MCP快速入门实战(一)

目录 1. MCP入门介绍 2. Function calling技术回顾 3. 大模型Agent开发技术体系回顾 二、 MCP客户端Client开发流程 1. uv工具入门使用指南 1.1 uv入门介绍 1.2 uv安装流程 1.3 uv的基本用法介绍 2.MCP极简客户端搭建流程 2.1 创建 MCP 客户端项目 2.2 创建MCP客户端…...

01背包问题:详细解释为什么重量维度必须从大到小遍历。

01背包 问题描述 题目链接&#xff1a;https://www.lanqiao.cn/problems/1174/learning/?page1&first_category_id1&problem_id1174 特点&#xff1a;每件物品只能拿或者不拿。 解法1 设置状态&#xff1a;dp[i][j]指的是前i件物品重量为j的最大价值。 第i件物品…...

Nginx配置伪静态,URL重写

Nginx配置伪静态&#xff0c;URL重写 [ Nginx ] 在Nginx低版本中&#xff0c;是不支持PATHINFO的&#xff0c;但是可以通过在Nginx.conf中配置转发规则实现&#xff1a; location / { // …..省略部分代码if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s/$1 l…...

【KMP】P10915 [蓝桥杯 2024 国 B] 最长回文前后缀|普及+

本文涉及知识点 较难理解的字符串查找算法KMP P10915 [蓝桥杯 2024 国 B] 最长回文前后缀 题目描述 小明特别喜欢回文串&#xff0c;然而回文串太少见了&#xff0c;因此他定义了一个字符串的相同长度的、不相交的前缀和后缀是“回文前后缀”&#xff0c;当且仅当这个前缀和…...

【linux学习】linux系统调用编程

目录 一、任务、进程和线程 1.1任务 1.2进程 1.3线程 1.4线程和进程的关系 1.5 在linux系统下进程操作 二、Linux虚拟内存管理与stm32的真实物理内存区别 2.1 Linux虚拟内存管理 2.2 STM32的真实物理内存映射 2.3区别 三、 Linux系统调用函数 fork()、wait()、exec(…...

构建第一个ArkTS应用:Hello World之旅

# 构建第一个ArkTS应用&#xff1a;Hello World之旅 在鸿蒙应用开发的领域中&#xff0c;ArkTS语言为我们提供了强大而便捷的开发方式。今天&#xff0c;就让我们一起踏上构建第一个ArkTS应用——Hello World的奇妙旅程。 ## 一、创建ArkTS工程 1. 首先&#xff0c;我们要使用…...

Mysql 集群架构 vs 主从复制架构

特性主从复制架构MySQL 集群架构适用场景读多写少的场景&#xff1b;备份&#xff1b;高可用高并发读写、实时交易、高可用性场景可扩展性仅读性能可扩展读写都可以水平扩展高可用性手动切换&#xff0c;有限的高可用支持自动故障转移&#xff0c;强高可用支持部署复杂度较简单…...

国产轻量级多途径无限制的高效下载工具介绍

软件介绍 们在日常中常常有下载各类文件的需求&#xff0c;学习资料也好&#xff0c;娱乐文件也罢。有一款国产的BT下载软件——BitComet&#xff08;比特彗星&#xff09;&#xff0c;它凭借高效且无限制的特性&#xff0c;在下载爱好者中备受青睐。 BitComet属于轻量级的BT下…...

leetcode数组-长度最小的子数组

题目 题目链接&#xff1a;https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n个正整数的数组和一个正整数 target** 。** 找出该数组中满足其总和大于等于target的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**…...

如何理解缓存一致性?

缓存一致性是指在多处理器系统或分布式系统中&#xff0c;确保各个处理器核心或节点的缓存数据与主内存以及其他缓存中的数据保持一致的机制和过程。以下从问题产生原因、一致性协议和实现方式等方面进行详细理解&#xff1a; 1. 问题产生的原因 1.1 缓存存在的必要性 在计…...

智能体(Agent)系统源码解析:AI 自动化办公的未来

—从代码到商业落地&#xff0c;如何用Agent重构企业工作流&#xff1f; 一、Agent系统的核心价值 1. 企业办公效率的瓶颈 重复性任务耗时&#xff1a;数据录入、报表生成、邮件处理等占员工 40% 工作时间跨系统协作低效&#xff1a;OA/CRM/ERP数据孤岛&#xff0c;人工搬运错…...

字符串移位包含问题

字符串移位包含问题 #include <iostream> #include <algorithm> using namespace std; int main(){string a,b;cin>>a>>b;//谁长遍历谁if(a.size()<b.size()) swap(a,b);//1-对整个字符串进行移位for(int i0; i<a.size(); i){//每次循环都将第一…...

【JavaScript】原型链 prototype 和 this 关键字的练习(老虎机)

这个老虎机练习主要考察JavaScript中的原型链&#xff08;prototype&#xff09;和this关键字的使用。 主要思路 创建三个轮盘&#xff08;reels&#xff09;实例&#xff1a;我们需要创建3个独立的轮盘对象&#xff0c;它们都委托&#xff08;delegate&#xff09;到基础的ree…...

Windows强制删除任何你想删除的文件和文件夹

Windows强制删除任何你想删除的文件和文件夹 本教程适用于 Windows 10/11 系统&#xff0c;工具和命令均经过验证。 为什么删除会失败&#xff1f; 权限不足&#xff1a;文件或文件夹可能需要管理员权限才能删除。文件被占用&#xff1a;某个程序正在使用目标文件&#xff0c…...

【MySQL数据库】锁机制

概述 锁&#xff1a;是计算机协调多个进程或者线程并发访问某一资源的机制。在数据库中&#xff0c;除了传统的计算资源&#xff08;CPU、RAM、IO&#xff09;的争用以外。数据也是一种供多用户共享的资源。如何保证数据的并发访问的一致性、有效性是所有数据库必须解决的一个…...

JS dom修改元素的style样式属性

1通过样式属性修改 第三种 toggle有就删除 没就加上...

搜索树——AVL、红黑树、B树、B+树

目录 二叉搜索树 AVL树 2-3-4树 红黑树 旋转操作 概念讲解 旋转节点操作&#xff08;左旋&#xff09; 插入节点 删除节点 B树和B树 B树 2.5.2 B树 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 难度高&#xff0c;如果想要了解红黑树的增加、…...

2007-2019年各省地方财政交通运输支出数据

2007-2019年各省地方财政交通运输支出数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政交通运输支出 4、范围&#xff1a;31省 5、指标说明&#xff1a;地方财政交通运输支出是指地方…...

LeetCode算法题(Go语言实现)_29

题目 给你一个链表的头节点 head 。删除 链表的 中间节点 &#xff0c;并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2…...

MINIQMT学习课程Day6

学习安装qmt 安装好后&#xff0c;点击启动国金qmt系统 之后将xtquant包手动安装到python中的site_package中&#xff0c;之后使用pycharm打开文件&#xff0c;创建本地命令文件。 具体的xtquant安装包以及qmt模拟环境&#xff0c;以及模拟账号密码&#xff0c;可以加我私信沟…...

WinForm真入门(7)——Button控件详解

WinForm Button 控件详解 Button&#xff08;按钮&#xff09;是 WinForm 中最基础的交互控件&#xff0c;用于触发操作&#xff08;如&#xff1a;点击登录按钮进入系统&#xff09;或提交数据&#xff08;如&#xff1a;写好请假申请后&#xff0c;点击提交&#xff0c;把申…...

035-Windows抓屏-GDI

Windows抓屏-GDI 一、技术原理 GDI&#xff08;Graphics Device Interface&#xff09;抓屏基于Windows系统提供的图形设备接口&#xff0c;通过设备上下文&#xff08;DC&#xff09; 实现屏幕内容捕获。核心流程如下&#xff1a; 获取桌面窗口句柄&#xff1a;通过 //获取…...

复古优雅感涂鸦手绘喷漆街头艺术字体 Enter Sonic Graffiti

Enter Sonic Graffiti 是 Rvq Typefoundry 的新字体&#xff0c;具有优雅感的字符集。要创建漂亮的组合&#xff0c;只需混合大写和小写&#xff0c;然后与其他字符形混合即可。新的 Graffiti 字体样式和 .我将这款字体献给我正在与癌症作斗争的母亲。我希望我的母亲和所有受癌…...

4.4 代码随想录第三十五天打卡

121. 买卖股票的最佳时机 (1)题目描述: &#xff0c; (2)解题思路: class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();if (len 0) return 0;vector<vector<int>> dp(len, vector<int>(2));dp[0][0] - pr…...

PyTorch 深度学习实战(34):神经架构搜索(NAS)实战

在上一篇文章中&#xff0c;我们探讨了联邦学习与隐私保护技术。本文将深入介绍神经架构搜索&#xff08;Neural Architecture Search, NAS&#xff09;这一自动化机器学习方法&#xff0c;它能够自动设计高性能的神经网络架构。我们将使用PyTorch实现基于梯度优化的DARTS方法&…...

【python】速通笔记

Python学习路径 - 从零基础到入门 环境搭建 安装Python Windows: 从官网下载安装包 https://www.python.org/downloads/Mac/Linux: 通常已预装&#xff0c;可通过终端输入python3 --version检查 配置开发环境 推荐使用VS Code或PyCharm作为代码编辑器安装Python扩展插件创建第…...

简易Minecraft python

废话多说 以下是一个基于Python和ModernGL的简化版3D沙盒游戏框架。由于代码长度限制&#xff0c;这里提供一个核心实现&#xff08;约500行&#xff09;&#xff0c;您可以通过添加更多功能和内容来扩展它&#xff1a; python import pygame import moderngl import numpy a…...

Linux信号处理解析:从入门到实战

Linux信号处理全解析&#xff1a;从入门到实战 一、初识Linux信号&#xff1a;系统级的"紧急电话" 信号是什么&#xff1f; 信号是Linux系统中进程间通信的"紧急通知"&#xff0c;如同现实中的交通信号灯。当用户按下CtrlC&#xff08;产生SIGINT信号&…...

2025-04-04 Unity 网络基础5——TCP分包与黏包

文章目录 1 分包与黏包2 解决方案2.1 数据接口2.2 定义消息2.3 NetManager2.4 分包、黏包处理 3 测试3.1 服务端3.2 客户端3.3 直接发送3.4 黏包发送3.5 分包发送3.6 分包、黏包发送3.7 其他 1 分包与黏包 ​ 分包、黏包指在网络通信中由于各种因素&#xff08;网络环境、API …...

Ubuntu 安装 JMeter:为你的服务器配置做好准备

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要下载 Java&#xff0c;请遵…...

swift-oc和swift block和代理

一、闭包或block 1.1、swift 闭包表达式作为参数的形式 一、闭包的定义 func exec(v1: Int, v2: Int, fn: (Int, Int) -> Int) { print(fn(v1, v2)) } 二、调用 exec(v1: 10, v2: 20, fn: { (v1: Int, v2: Int) -> Int in return v1 v2 }) 1.2、swift 闭包表达式作为…...

【数据结构】_队列

hello 友友们~ 今天我们要开始学习队列啦~ 话不多说&#xff0c;让我们开始吧&#xff01;GO! 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。 队列具有先进先出FIFO(First In First Out) 入队列&#x…...

【软考中级软件设计师】数据表示:原码、反码、补码、移码、浮点数

数据表示 一、数据表示1、整数的表示(1) 原码(2) 反码(3) 补码&#xff1a;(4) 移码 2、浮点数的表示&#xff08;IEEE 754标准&#xff09; 一、数据表示 计算机使用的是二进制&#xff0c;也就是0和1的组合。所有的数据&#xff0c;无论是数字、文字还是图片、声音&#xff…...

Linux(十二)信号

今天我们就要来一起学习信号啦&#xff01;&#xff01;&#xff01;还记得小编在之前的文章中说过的ctrlc吗&#xff1f;之前小编没有详细介绍过&#xff0c;现在我们就要来学习啦&#xff01;&#xff01;&#xff01; 一、信号的基本介绍 首先&#xff0c;小编带领大家先一…...

迪杰斯特拉+二分+优先队列+拓扑+堆优化(奶牛航线Cowroute、架设电话线dd、路障Roadblocks、奶牛交通Traffic)

原文地址 https://fmcraft.top/index.php/Programming/2025040402.html 主要算法 迪杰斯特拉Dijkstra 题目列表 P1&#xff1a;奶牛航线Cowroute 题目描述 题目描述 Bessie已经厌倦了农场冬天的寒冷气候&#xff0c;她决定坐飞机去更温暖的地方去度假。不幸的是&#xf…...

【数据结构】树的介绍

目录 一、树1.1什么是树&#xff1f;1.2 树的概念与结构1.3树的相关术语1.4 树形结构实际运用场景 二、二叉树2.1 概念与结构2.2 特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树 个人主页&#xff0c;点击这里~ 数据结构专栏&#xff0c;点击这里~ 一、树 1.1什么是树&#xff1…...

【CF】Day24——Codeforces Round 994 (Div. 2) D

D. Shift Esc 题目&#xff1a; 思路&#xff1a; 典DP的变种 如果这一题没有这个变换操作&#xff0c;那么是一个很典型的二维dp&#xff0c;每一个格子我们都选择上面和左边中的最小值即可 而这题由于可以变换&#xff0c;那我们就要考虑变换操作&#xff0c;首先一个显然…...

Python 字典

Python 字典 字典的介绍 字典不仅可以保存值&#xff0c;还能对值进行描述使用大括号来表示一个字典&#xff0c;不仅有值 value &#xff0c;还有值的描述 key字典里的数据都是以键值对 key-value 的形式来保留的key 和 value 之间用冒号 : 来连接多个键值对之间用逗号 , 来…...

yolov12检测 聚类轨迹运动速度

目录 分割算法api版: 分割算法: yolo_kmean.py 优化版: 第1步,检测生成json 第2步骤聚类: 分割算法api版: import json import os from glob import globimport cv2 import imageio import numpy as np from scipy.ndimage import gaussian_filter1d from scipy.s…...

【Lua】pcall使用详解

目录 基本语法核心作用基础示例示例 1&#xff1a;捕获一个简单错误示例 2&#xff1a;调用不存在的函数 高级用法1. 传递多个参数和接收多个返回值2. 捕获带 error 主动抛出的错误3. 匿名函数与 pcall 使用场景注意事项总结 在 Lua 中&#xff0c;pcall&#xff08;Protected …...