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

Linux操作系统学习之---进程状态

       

目录

        明确进程的概念:

       

Linux下的进程状态:

        虚拟终端的概念:

         见一见现象:

        用途之一 : 结合指令来监控进程的状态:

和进程强相关的系统调用函数接口:

        getpid()和getppid():

        fork():

        fork函数创建子进程的分流逻辑: 

        进程之间具有独立性: 

         进程中存在的写时拷贝:

见一见进程状态:       

  在代码层面见一见R和S两种状态:

        系统调用函数 getpid() 和 getppid()

        代码和实操: 

         出现的疑点:

在代码层面见一见 Z状态:

        概念理解:

         代码实践:

粗略了解一下D状态:

补充说明X和T状态:

在文件层面见一见进程:

特殊的进程:孤儿进程

        验证代码: 

        见一见效果: 

         最终的去处:


在笼统的认识了整个操作系统之后,就可以挑一个局部开始学习. 进程就是一个很好的选择 , 他就想一个不知疲倦的员工,等待着使用者发号施令 . 我们的每一个操作,最终能够起到作用都是以来着一个个进程 , 所以他也是离我们最近的元素 . 

        明确进程的概念:

        一切程序最开始都是乖乖待在磁盘里的一堆二进制文件 , 当打开电脑后 , 不管是系统内置的程序 , 还是我们自己的程序 , 加载到内存 , 就变成了进程

        具体来讲 , 当加载一个程序时 , 原本在磁盘里的代码和数据被加载到内存 , 经过操作系统的无形大手 , 将这一堆内容定义成了统一的格式---结构体(操作系统底层通常都是c语言) .

        因此 , 真正称得上进程并非单纯的"程序"这一抽象概念 , 而是进程控制块PCB(结构体实例化处的对象 Process Control BLOCK) + 代码和数据 .

        我们管理一个进程 , 本质上就是对操作系统发号施令,让他来管理这两个内容.

       

Linux下的进程状态:

运行(R)指的是处于调度队列里的进程
可中断睡眠(S)又称作阻塞,通常是在等待各种事件时的状态
不可中断睡眠(D)

通常是在等待IO操作时的状态

停止(T)比如我们按下Ctrl+z , 一个前台进程就停止了
死亡(X)这个状态一般我们看不到

        虚拟终端的概念:

         由于咱通常都是用windows电脑来学习Linux操作系统,所以配置虚拟机啥的比较麻烦 , 索性就用xshell之类的外壳程序来连接云服务器进行操作 . 

        而一台云服务器可以同时供多个用户使用 , 甚至 , 同一个用户还可以同时打开两个终端同时对一台机器进行操作 , 看着是不是有些让人匪夷所思 ,下面简单解释一下子:

         见一见现象:

 现象:

 只打开一个终端时:

用同一个用户多开一个终端时: 

        用途之一 : 结合指令来监控进程的状态:

        比方说我们初次学习进程,了解了一堆概念 , 那么久可以开一个终端窗口用于运行我们的程序 , 开第二个窗口用于监控我的的程序状态(程序运行起来后就是一个进程)

和进程强相关的系统调用函数接口:

        getpid()和getppid():

        这俩哥们很简单 , getpid()函数返回当前进程的pid ;  getppid()返回父进程的pid

        fork():

        这个函数相较于c语言的大部分函数来说都很神奇 , 调用它就会为当前进程创建一个子进程 , 而我们知道子进程创建出来是为父进程分担任务的 , 这就涉及到它的三个返回值了

        fork函数创建子进程的分流逻辑: 

        fork有三个返回值:

  1.  如果是父进程 , 返回整数
  2. 如果是子进程 , 返回0
  3. 如果创建子进程失败 , 返回负数

        因此虽然父子进程拥有一样的代码 , 但fork的返回值不会骗人 , 只要我们自己在代码里对fork()的返回值进行判断 , 根据返回值的不同执行不同的代码 , 就可以达到代码分流的目的了

        简单来说

        进程之间具有独立性: 

        上图中的父子进程似乎执行的是同一段代码 , 只是不同的部分 , 其实父进程和子进程是完全独立的 , 他们具有不同的pid.

        之所以可以执行同一块代码 , 只是因为代码本身在程序运行期间是只读的 , 存放在代码区, 不属于任何进程自己的的内容 , 因此父子进程都可以访问同一段代码(保存同样的指针)

         进程中存在的写时拷贝:

       尽管进程之前是独立的,但是在刚刚创建子进程时 , 为了提升效率 , 子进程新创建的PCB的内容几乎是从父进程那完完全全拷贝而来的(除了pid等等比较特殊的属性才会不同).

        当调用fork函数时,会创建一个当前进程的子进程 , 子进程会拥有和当前进程同样的代码和数据.

        代码是存在于代码区带只读内容 , 父、子进程只需要保存相同的指针变量指向对应的代码即可

        而数据不同 ,尤其是变量 ,可能需要被频繁的修改 ,为了避免多个进程各自修改同一个变量对其他进程造成影响 , 就有了写时拷贝的设计

        一旦涉及数据的修改 , 操作系统就会为修改数据的进程新开辟一块空间 , 拷贝一份原来的数据让他进行自己的操作 . 

        这就像"借鉴"同学的作业一样 , 你只是看看还好 , 如果你想要修改 , 哪怕只是改一下名字 , 也得你自己另外弄一份来改!!!

见一见进程状态:       

  在代码层面见一见R和S两种状态:

        系统调用函数 getpid() 和 getppid()

    定义在<unistd.h>头文件中 , getpid会返回当前进程(运行的程序)的进程pid , pid是一个进程的唯一标识符, 类似于一个学生的学号 .

    getppid()则会返回当前进程(运行的程序)的父进程的pid , 当前的进程称为子进程 , 由父进程来创建这个进程. 就好像上级领导吩咐了一个下属来帮自己干活.

        接下来写一个死循环程序 , 其中使用了一个死循环来不停的调用getpid()和getppid()来打印子进程和父进程的pid( )

        接着打开第二个窗口来监视他的状态

        用于监视的指令 : while true; do ps -ajx | head - | ps -ajx | grep code; sleep 1; done

        其中code是我将要执行的程序

        代码和实操: 

#include<unistd.h> //类unix操作系统相关函数的头文件,此处用于getpid()和getppid()while(1){printf("我是一个进程,我的pid:%d , 我的ppid:%d\n",getpid(),getppid());sleep(1);}

         出现的疑点:

  1.        在刚才的程序里 , 明明是好像一直在一秒一秒的打印内容 , 为啥进程的状态是S+ 呢? 其实和S状态的定义和sleep函数有关:
  2.         S状态称为可中断睡眠状态 , 通常发生在进程等待某种指令的间隙 
  3.         我的程序里有sleep函数 , 是的每次执行完一次printf后就会等待一秒
  4.         可是printf进行打印的操作相较于sleep的1秒来说实在是太短了,以至于ps指令几乎没法捕捉到进程进行输出时的状态(R+)
  5.         如果想要看到程序为运行状态 , 只需要去掉sleep ,让进程频繁的进行打印.

         当去掉了代码和监控指令里的sleep后,总算是可以观察到R+状态了哈哈哈哈哈.

在代码层面见一见 Z状态:

        概念理解:

        Z(zombie)状态叫做僵尸状态 , 十分形象 :

        想象一个人突然倒在路边 , 没有了呼吸 , 可以当叫来警察和救护车后 , 并不会直接把人抬走然后通知家属 , 而是让医生先检测和抢救一下 , 如果没有这个过程 , 贸然带走尸体甚至是违法的 . 

        医生进行检测和抢救的过程 , 就是父进程回收子进程退出(死亡)信息的过程 , 如果没有回收 , 谁也不敢贸然处理(即不能释放这个进程的PCB) , 因此尸体在躺在地上的时候就会污染环境和占据空间(即迟迟不释放的PCB会占用内存空间).

        结论 : 当一个进程的使命结束 , 就会变成僵尸状态 , 如果没有父进程来获取他的退出信息 , 这个僵尸进程就会一直占用内存空间 ,造成空间浪费.

         代码实践:

        下面的代码让父进程一直运行 , 而子进程执行一条printf函数后就结束:

int ret = fork();if(ret > 0)//父进程{while(1){printf("我是父进程,pid:%d,我在😪\n",getpid());sleep(1);}}else if(ret == 0)//子进程{printf("我是子进程,pid:%d,我很快就要挂了....💀\n",getpid());}else  //创建子进程失败{//失败的情况很少见}

         下面是运行的内容和进程的监控内容 

粗略了解一下D状态:

定义 : 不可中断休眠 , 通常回出现在一个进程等待IO操作时 , 可以在一定程度上避免数据丢失

          这个很难验证 , 但可以文字叙述一下(情况之一):

  •         系统的内存资源是有限的 , 因此操作系统会在系统资源告急时采取一些策略 , 将不那么重要的进程的大部分内容给暂时移走
  •         当系统的资源告急时很严重了 , 为了表面上给用户一个良好的使用体验 , 除了看得见的前台进程 , 其他的不分青红皂白就会给杀掉!!!
  •         可是有的进程可能正在对磁盘里面写入数据 , 接着等待磁盘的处理结果 , 这时如果进程被杀掉了 , 不管写入数据是否成功 , 磁盘的处理结果可能就会丢失 , 用户层面对此是全然不知的!!!
  •         因此对于进行IO操作的进程 , 比如开个后门 , 让它们可以平平安安的获取操作的结果 , 也就有了D状态 , 故而也叫磁盘休眠状态

补充说明X和T状态:

        X状态 : 一个死透了的进程 , 通常上层用户看不见 , 毕竟后事处理完后就没有为他留着内存空间的必要了 . (上面提到过的僵尸进程就是还没死透但还需要被处理的进程)

         T状态:一个暂停了的进程 , 比如当使用Ctrl +z时就会导致进程停止 , 如果放着不管就会一直占用空间 , 造成资源浪费!!!

在文件层面见一见进程:

        Linux的一大设计理念---一切皆文件 . 连时而创建,时而销毁的进程也不例外

 系统根目录下的一个proc目录存放了和进程相关的文件:

如果随便查看一个管理进程的目录文件的内容 , 结果如下 :

当然喽,如果是查看自己的进程的路径(比如自己运行的c语言程序) , 情况会变化

特殊的进程:孤儿进程

        在验证僵尸进程时 , 情况是子进程先于父进程结束 , 而如果是父进程先结束后留下孤零零的子进程会怎么样呢? 答案是孤儿进程,名字也很形象啦.

        验证代码: 

//父进程立马结束,子进程死循环一直干活
int ret = fork();if(ret > 0)//父进程{printf("我是父进程,pid:%d,我马上溜啦🏃‍♂️💨\n",getpid());}else if(ret == 0)//子进程{while(1){printf("我是子进程,pid:%d,我在等我爸开路虎来接我😎\n",getpid());sleep(1);}}else  //创建子进程失败{//失败的情况很少见}

        见一见效果: 

        当运行程序 , 我们可以看到子进程的父进程的pid马上变成了1 , 并且 , 无法用Ctrl+c来杀掉这个进程!!!如下图: 

         pid为1的进程是最重要的系统进程(Linux下叫做init) , 甚至可以把他就当做操作系统本身 .(其实还有pid为0的进程,只不过在创建1号进程后很快就结束了)

        当父进程先于子进程退出 , 那后续子进程结束后就没有进程可以获取他的退出信息 , 从而就永远无法被销毁 , 这时就会由pid为1的系统进程来收养他 , 因此父进程提前退出的子进程也叫做孤儿进程

         最终的去处:

        孤儿进程被pid为1的init系统进程收养后 , 还会变成后台进程 , 无法被ctrl+c(针对前台进程)给终止 , 但可以使用 kill -9 pid来杀掉 .否则 , 系统不停止运行 , 这个子进程就会一直占用内存资源

相关文章:

Linux操作系统学习之---进程状态

目录 明确进程的概念: Linux下的进程状态: 虚拟终端的概念: 见一见现象: 用途之一 : 结合指令来监控进程的状态: 和进程强相关的系统调用函数接口: getpid()和getppid(): fork(): fork函数创建子进程的分流逻辑: 进程之间具有独立性: 进程中存在的写时拷贝: 见一见进程状态…...

Oracle 12.1.0.2补丁安装全流程

第一步&#xff0c;先进行备份 tar -cvf u01.tar /u01 第二步&#xff0c;更新OPatch工具包 根据补丁包中readme信息汇总提示的信息&#xff0c;下载对应版本的OPatch工具包&#xff0c;本次下载的版本为&#xff1a; p6880880_122010_Linux-x86-64.zip opatch版本为最新的…...

第19章:基于efficientNet实现的视频内容识别系统

目录 1.efficientNet 网络 2. 猫和老鼠 3. QT推理 4. 项目 1.efficientNet 网络 本章做了一个视频内容识别的系统 本文选用的模型是efficientNet b0版本 EfficientNet 是 Google 团队在 2019 年提出的一系列高效卷积神经网络模型&#xff0c;其核心思想是通过复合缩放&…...

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务是一个不可避免的挑战。随着业务复杂度的提升&#xff0c;如何保证跨服务的数据一致性成为了面试中的高频问题。本…...

div(HTML标准元素)和view(微信小程序专用组件)的主要区别体

div&#xff08;HTML标准元素&#xff09;和view&#xff08;微信小程序专用组件&#xff09;的主要区别体现在以下方面&#xff1a; 一、应用场景与开发框架 ‌适用平台不同‌ div是HTML/CSS开发中通用的块级元素&#xff0c;用于Web页面布局‌&#xff1b;view是微信小程序专…...

AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析

以下是 AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析&#xff1a; 1. 多Agent协同的定义与核心目标 多Agent系统&#xff08;MAS, Multi-Agent System&#xff09;&#xff1a; 由多个独立或协作的智能体&#xff08;Agent&#xff09;组成&#xff…...

03_Americanas精益管理项目_StarRocks

文章目录 03_StarRocks(一)StarRocks简介1、什么是StarRocks【理解】1)概述2)适用场景2、系统架构【理解】1)系统架构图2)数据管理3、使用【熟悉】(二)表设计4、StarRocks表设计【理解】1)列式存储2)索引3)加速处理5、数据模型【掌握】5-1 明细模型1)适用场景2)创…...

CSS进度条带斑马纹动画(有效果图)

效果图 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加进度</button>.js Page({data: {w:0,},updateLine(){this.…...

C++ static的使用方法及不同作用

在 C 里&#xff0c;static 是一个用途广泛的关键字&#xff0c;在不同场景下有不同含义&#xff0c;下面为你详细介绍&#xff1a; 1. 全局变量前的 static 当 static 用在全局变量前时&#xff0c;它会改变变量的链接属性。 默认全局变量&#xff1a;默认的全局变量具有外…...

CSS 美化页面(四)

一、浮动float属性 ‌属性值‌‌描述‌‌适用场景‌left元素向左浮动&#xff0c;腾出右侧空间供其他元素使用&#xff0c;其他内容会围绕在其右侧‌。横向排列元素&#xff08;如导航菜单&#xff09;、图文混排布局‌。right元素向右浮动&#xff0c;腾出左侧空间供其他元素使…...

驱动-原子操作

前面 对并发与竞争进行了实验&#xff0c; 两个 app 应用程序之间对共享资源的竞争访问引起了数据传输错误&#xff0c; 而在 Linux 内核中&#xff0c; 提供了四种处理并发与竞争的常见方法&#xff1a; 分别是原子操作、 自旋锁、 信号量、 互斥体&#xff0c; 这里了解下原子…...

Flutter ListView 详解

ListView 是 Flutter 中用于构建滚动列表的核心组件&#xff0c;支持垂直、水平滚动以及复杂的动态布局。本文将深入解析其核心用法、性能优化策略和高级功能实现&#xff0c;助你打造流畅高效的列表界面。 一、基础篇&#xff1a;快速构建各类列表 1. 垂直列表&#xff08;默…...

关于视频的一些算法内容,不包含代码等

视频算法&#xff1a; 视频降噪&#xff0c; 去除视频中的噪音&#xff0c;提高图像质量 工作原理&#xff1a; 时域降噪&#xff1a;利用相邻帧之间的相似性&#xff0c;通过平均或滤波来减少随机噪声。 空域降噪&#xff1a;在单帧内使用滤波器&#xff08;高斯滤波器&am…...

OpenCV 图形API(43)颜色空间转换-----将 BGR 图像转换为 LUV 色彩空间函数BGR2LUV()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从BGR色彩空间转换为LUV色彩空间。 该函数将输入图像从BGR色彩空间转换为LUV。B、G和R通道值的传统范围是0到255。 输出图像必须是8位无符…...

keil报错 ..\..\Libraries\CMSIS\stm32f10x.h(298): error: #67: expected a “}“

报错原因&#xff1a; 通常是由于启动文件、头文件定义或驱动选择不一致导致的。以下是一些具体的解决方案&#xff0c;可以帮助你解决这个问题&#xff1a; 检查步骤&#xff1a; 1. 检查启动文件 确保你的启动文件与你的芯片型号相匹配。例如&#xff0c;如果你的芯片是S…...

图像预处理-添加水印

一.ROI切割 类似裁剪图片&#xff0c;但是原理是基于Numpy数组的切片操作(ROI数组切片是会修改原图数据的)&#xff0c;也就是说这个“裁剪”不是为了保存“裁剪”部分&#xff0c;而是为了方便修改等处理。 import cv2 as cv import numpy as npimg cv.imread(../images/dem…...

扩展欧几里得算法【Exgcd】的内容与题目应用

1.简介 exgcd的目的是表示出二元一次不定方程的通解。 形式化地&#xff0c;exgcd算法就是输入a&#xff0c;b&#xff0c;c的值&#xff0c;返回一组x&#xff0c;y&#xff0c;满足 a x b y c axbyc axbyc。 2.1方程无整数解的情况 当 c 不能被 a &#xff0c;b最小公倍…...

OpenCV day5

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 目录 9.cv2.adaptiveThreshold(): 10.cv2.split()&#xff1a; 11.cv2.merge()&#xff1a; 12.cv2.add()&#xff1a; 13.cv2.subtract()&#xff1a; 14.cv2.multiply()&#xff1a; 15.cv2.divide()&#xff1a; 1…...

Spring DI 详解

学习过 IoC 后&#xff0c;就知道我们可以将对象交给 Spring 进行管理&#xff0c;但是我们在一个类会有若干属性&#xff0c;也就是这个类依赖于这若干个属性&#xff0c;那么我们就可以将交给 Spring 管理的对象注入到这个类中&#xff0c;这也就是依赖注入。 依赖注入有三种…...

解锁动态规划的奥秘:从零到精通的创新思维解析(9)

前言&#xff1a; 小编在前几日写了关于动态规划中的多状态dp的问题&#xff0c;此时小编将会讲述一个动态规划我们常常会遇到的一类问题——股票问题&#xff0c;股票问题就类似小编上一篇所讲述的粉刷房子的问题&#xff0c;可以通过一个二维的dp表来代替多个一维的dp表。买卖…...

redis 配置日志和数据存储位置

Redis配置日志和数据存储位置 介绍 Redis是一个开源的高性能键值存储数据库&#xff0c;常用于缓存、消息队列和实时分析等场景。在使用Redis时&#xff0c;我们需要配置日志和数据存储位置&#xff0c;以便更好地管理和监控Redis的运行状态。本文将介绍如何配置Redis的日志和数…...

STL详解 - stack与queue的模拟实现

目录 一、容器适配器 1. 什么是适配器模式 2. stack与queue的底层结构 3. deque的原理与缺陷 3.1 deque的原理 3.2 deque的缺陷 4. 为何选择deque作为默认底层容器 二、stack与queue的模拟实现 1. stack的实现 2. queue的实现 一、容器适配器 1. 什么是适配器模式 适…...

Chromium 134 编译指南 macOS篇:获取源代码(四)

1. 引言 在Chromium 134的开发之旅中&#xff0c;获取源代码是一个至关重要的里程碑。本文将引导您完成这一关键步骤&#xff0c;为后续的编译和开发工作奠定坚实的基础。无论您是出于学习目的&#xff0c;还是计划开发自己的浏览器项目&#xff0c;掌握获取Chromium源码的方法…...

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用 1. Kotlin 是什么&#xff1f; Kotlin 是由 JetBrains&#xff08;IntelliJ IDEA 的开发商&#xff09;设计的一种现代化编程语言&#xff0c;2016年正式发布&#xff0c;2017年被 Google 指定为 Android 官方开发语言。…...

MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)

原题(English) Let the sum of the square of the digits of a positive integer S0S0​ be represented by S1S1​. In a similar way, let the sum of the squares of the digits of S1S1​ be represented by S2S2​ and so on. If Si1Si​1 for some i≥1i≥1, then the or…...

2843. 统计对称整数的数目

2843. 统计对称整数的数目 题目链接&#xff1a;2843. 统计对称整数的数目 代码如下&#xff1a; class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low;i < high;i) {string s to_string(i);int n s.size();if (n % 2 …...

【模块化拆解与多视角信息6】自我评价:人设构建的黄金50字——从无效堆砌到精准狙击的认知升级

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…...

ServletRequestAttributeListener 的用法笔记250417

ServletRequestAttributeListener 的用法笔记250417 以下是关于 ServletRequestAttributeListener 的用法详解&#xff0c;涵盖核心方法、实现步骤、典型应用场景及注意事项&#xff0c;帮助您有效监听请求级别属性&#xff08;ServletRequest 中的属性&#xff09;的变化&…...

大模型在胃十二指肠溃疡预测及诊疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法和创新点 二、大模型相关理论基础 2.1 大模型的基本原理 2.2 适用于医疗领域的大模型类型 2.3 大模型在医疗领域的应用现状和潜力 三、胃十二指肠溃疡的疾病特征 3.1 疾病概述 3.2 诊断方法 3.3 …...

第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?

对比&#xff1a;useEffect vs use处理Promise 代码题&#xff1a;用use改写数据请求逻辑 React 19 use 钩子&#xff1a;异步操作革命性简化方案&#xff08;附完整代码对比&#xff09; 一、useEffect vs use 处理 Promise 核心差异对比 对比维度useEffect 方案use 钩子方案…...

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤&#xff1a;1.首先安装脚手架的环境&#xff0c;2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目&#xff1a;1.和Vue一样&#xff0c;先安装脚手架然后通过脚手架指令搭建&#xff1b;2.npx create-…...

方案精读:华为数字化转型实践案例合集【附全文阅读】

华为数字化转型旨在通过数字化变革实现全连接的智能华为,成为行业标杆,提升客户满意度和运营效率。其以客户为中心,基于 “双轮驱动” 理念,从转意识、方法、文化、组织、模式等方面入手,构建数字化平台,推进数据治理,保障安全,开展业务重构。通过合同 360、产品设计与…...

VScode使用Pyside6(环境篇)

Pyside6的环境搭建&#xff1a; cmd命令窗口输入&#xff1a;pip install pyside6 使用everthing进行查找&#xff1a;&#xff08;非常好用的一款搜索工具 &#xff09; 进入PySide6文件夹中&#xff0c;点击designer.exe,查看是否能够点开。 VScode环境搭建&#xff1a; 下…...

智能云图库-12-DDD重构

本节重点​ 之前我们已经完成了本项目的功能开发。由于本项目功能丰富、代码量大&#xff0c;如果是在企业中维护开发的项目&#xff0c;传统的 MVC 架构可能会让后续的开发协作越来越困难。所以本节鱼皮要从 0 带大家学习一种新的架构设计模式 —— DDD 领域驱动设计。 大纲…...

Linux 网络配置

文章目录 网络基础知识IP地址子网掩码DNS Linux操作系统网络配置 网络基础知识 IP地址 IP地址是用于区分同一个网络中的不同主机的唯一标识。 Internet中的主机要与其他机器通信必须具有一个IP地址&#xff0c;因为网络中传输的数据包必须携带目的IP地址和源IP地址&#xff…...

05-DevOps-Jenkins自动拉取构建代码2

通过前面的操作&#xff0c;已经成功完成了源代码的打包工作&#xff0c;具体操作参见下面的文章&#xff1a; 05-DevOps-Jenkins自动拉取构建代码-CSDN博客 验证打包文件 验证打包后的文件是否存在&#xff0c;进入到Jenkins的工作目录中&#xff0c;找到对应的jar包&#x…...

ESP32之OTA固件升级流程,基于VSCode环境下的ESP-IDF开发,基于阿里云物联网平台MQTT-TLS连接通信(附源码)

目录 1.创建产品和设备 2.准备工作 2.1 获取基础工程 2.2 基本知识概述 2.2.1 OTA升级流程 2.2.2 主题和数据格式 &#xff08;1&#xff09;设备上报版本号 ①请求主题&#xff08;设备 -> 阿里云&#xff09;&#xff1a; ②响应主题&#xff08;阿里云->设备…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(20):拾遗 - imgproc 基础操作(下)

文章目录 前言imgproc 基础操作&#xff08;下&#xff09;8. 霍夫检测9. 滤波与模糊10. 拟合与包围 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#xff0c;LabVIEW>2018&#xff0c;兼容32位和64位。…...

kafka发送消息,同时支持消息压缩和不压缩

1、生产者配置 nacos中增加配置&#xff0c;和公共spring-kafka配置字段有区分 需要发送压缩消息时&#xff0c;使用该配置类发送即可 import org.apache.kafka.clients.producer.ProducerConfig; import org.springframework.beans.factory.annotation.Autowired; import or…...

AOSP世界时间的更新

在 AOSP&#xff08;Android Open Source Project&#xff09;中&#xff0c;世界时间的更新主要涉及设备时区数据的管理和更新&#xff0c;以确保设备能够正确显示全球各地的时间。AOSP 依赖 IANA 时区数据库&#xff08;也称为 tzdata&#xff09;来提供时区规则和世界时间数…...

Python + 链上数据可视化:让区块链数据“看得懂、用得上”

Python + 链上数据可视化:让区块链数据“看得懂、用得上” 区块链技术的透明性和去中心化特性,使得链上数据成为金融、供应链、NFT 以及 DeFi 领域的关键参考。可是,对于普通用户而言,链上数据往往晦涩难懂,难以直接利用。那么,如何利用 Python 提取、分析并直观展示链上…...

方德桌面操作系统V5.0-G23 vim无法复制粘贴内容

1.修改 Vim 配置文件 rootyuhua-virtualmachine:/etc/docker# sudo vim /usr/share/vim/vim82/defaults.vim 2.在第82行找到set mousea行&#xff0c;将其为set mouse-a。如果文件中没有set mousea&#xff0c;则修改添加set mouse-a。 3.保存文件并退出 Vim&#xff1a; 4…...

[linux] vim 乱码

1. 确保终端支持中文 设置终端编码为 UTF-8,运行: echo $LANG如果不是 UTF-8(如 en_US.UTF-8),你可以设置为: export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 2. 确保 Vim 使用 UTF-8 编码 打开 .vimrc 或输入以下命令: :set encoding=utf-8 :set fileencodin…...

天洑参加人工智能校企产学研及人才对接活动——走进南京大学人工智能学院

4月15日&#xff0c;人工智能校企产学研及人才对接——走进南京大学人工智能学院活动在南京大学成功举办。此次活动由江苏省人工智能学会、南京大学人工智能学院主办&#xff0c;江苏省工业和信息化厅党组成员、副厅长池宇&#xff0c;南京大学副校长周志华出席。江苏省工业和信…...

33、单元测试实战练习题

以下是三个练习题的具体实现方案&#xff0c;包含完整代码示例和详细说明&#xff1a; 练习题1&#xff1a;TDD实现博客评论功能 步骤1&#xff1a;编写失败测试 # tests/test_blog.py import unittest from blog import BlogPost, Comment, InvalidCommentErrorclass TestBl…...

《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化

第22篇&#xff1a;系统提示词(System Prompt)设计与优化 摘要 在大语言模型&#xff08;LLM&#xff09;应用中&#xff0c;系统提示词&#xff08;System Prompt&#xff09;是控制模型行为的核心工具之一。它不仅定义了模型的身份、角色和行为规范&#xff0c;还直接影响输…...

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…...

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 仅针对urp管线 参考了YY老师这篇&#xff0c;可以先看他的再看这个可能更好理解一些&#xff1a;Unity Meta Quest MR 开发&#xff08;七&#xff09;&#xff1a;使…...

Spark on K8s 在vivo大数据平台的混部实战

作者&#xff1a;vivo 互联网大数据团队- Qin Yehai 在离线混部可以提高整体的资源利用率&#xff0c;不过离线Spark任务部署到混部容器集群需要做一定的改造&#xff0c;本文将从在离线混部中的离线任务的角度&#xff0c;讲述离线任务是如何进行容器化、平台上的离线任务如何…...

Mac配置Java的环境变量

刚拿到手的Mac mini M4如何去设置java的环境变量&#xff1f; 第一步&#xff1a; 首先&#xff0c;你先下载好intelliJ IDEA&#xff0c;然后在里面自带的jdk列表里选择你自己想要使用的jdk的版本以及供应商。 下面是我自己使用的jdk版本以及供应商&#xff1a; 第二步&am…...