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

Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿

目录

 1. 进程状态的概念

 1.1 课本上的说法:名词提炼

1.2 运行,阻塞和挂起 

1.2.1 什么叫做运行状态(running)?

1.2.2 什么叫做阻塞状态(sleeping)?

1.2.3 什么叫做挂起状态(pending)?

2. linux下的进程状态

 2.1 R运⾏状态(running)

2.2 S睡眠状态(sleeping)

2.3 D磁盘休眠状态(深度睡眠)(Disk sleep)

2.4 T/t暂停状态(stopped)

 2.5 X死亡状态(dead)

 2.6 Z僵尸状态(zombie)

 如何模拟Z状态

僵尸进程危害 

浅谈

3. 孤儿进程


接前文:Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/hedhjd/article/details/144299919?spm=1001.2014.3001.5501

 1. 进程状态的概念

⼀个进程可以有多个状态(在Linux内核⾥,进程有时候也叫做任务),打个比方:我们现在正在上课,这叫做上课中,上完课回到宿舍睡觉,这叫做休息中,休息完跑到操场是跑步,这叫做运动中

  

所以每一个人都有自己对应的状态,状态决定了我们当前正在做什么事情,以及系统应该如何看待我们:比如你每天准时上课,那么你就是一个好学生

  

对于进程来说,这个进程当前是需要被使用,还是正在休眠,正在等待,所以进程的状态决定了当前进程在系统里应该被如何处理 

进程状态的本质其实就是task_state结构体内部的一个整数

 1.1 课本上的说法:名词提炼

由上图可以得知:进程具有多种状态,状态之间是可以相互转化的


1.2 运行,阻塞和挂起 

PCB即属于双链表又属于队列,但是我们可以把队列也看作是一个双链表,只不过这个双链表遵守的是尾进头出

  

在这里有一个既不属于Linux也不使用其他操作系统的调度算法之一的 —— FIFO(先进先出),也就是说在这个队列当中在头部的优先级高,尾部的优先级低,优先级按照顺序排

  

我们下面这张图就是CPU调度按照顺序来依次调度


1.2.1 什么叫做运行状态(running)?

  

当一个进程只有CPU在跑的时候,它就是运行状态,但是在当代计算机里面,只要一个进程在调度队列当中,它就是运行状态(running)

    

处于running状态的进程,也么是正在被运行,要么就是已经准备好了,随时都可以被调度

  

运行状态对于的是创建,就绪和运行,其中运行和就绪可以当作一种状态


1.2.2 什么叫做阻塞状态(sleeping)?

举个例子:C语言当中的scanf函数,当我们scanf的时候,其实我们并不是在等待用户输入内容,而是在等待键盘硬件就绪,也就是在等待键盘上有按键被按下了,如果没有被按下就称之为键盘不就绪,那么scanf就要等

  

阻塞就是等待某种设备或者资源就绪,在等待的期间如果一直不就绪,那么我的进程就不会被调动,那么就会卡在哪里不动

  

我们以一个问题来理解一下:操作系统os是怎么对软硬件进行管理的?答案是:先描述,再组织

  

我们先拿硬件来举例子:实际上,因为操作系统要管理硬件,所以操作系统os也要创建数据结构(struct_device)

这个数据结构里包含的就是目标设备的所有属性,那么就说明struct_device可以直接或者间接获得我们对应的数据

   

  

上面这张图可以称之为设备队列,而下面的图片叫做运行队列

   

  

我们都知道,在内存当中,每一种设备都要对应一种struct_device结构体,当我们读磁盘读网卡的时候如果设备上对应的设备没有就绪,那么我们的进程就要阻塞等待了,那么在操作系统中我们如何理解阻塞等待呢?我们可以在数据结构体里加上一个等待队列

  

  

所以我们对应的每一个设备它都有一个等待队列

  

我们假设我们的CPU正在运行,当运行的时候执行我们的代码(假设是scanf)需要就绪读取,读取的时候OS发现需要去读取键盘,然后OS去检查键盘的状态,然后发现键盘没有任何活跃的状态,那么你这个进程无法读到键盘的任何数据进程就无法继续执行了,所以操作系统把这个进程从cpu上拿下来啊,并且把这个进程从运行队列当中移走然后把它链入到我们对应的特定设备的等待队列当中,那么这个进程就不会再被调度了,那么这个进程此时就处于阻塞状态

  

只有在运行队列里的进程才会被CPU调度,不在运行队列里转而在设备队列里等待,那么这个进程就叫做阻塞

  

  


1.2.3 什么叫做挂起状态(pending)?

   

当我们有一个进程处于阻塞状态的时候, 如果这个时候又来了几个进程, 而这个时候操作系统的内存不足了,那么这个时候, 操作系统就需要在保持正常的情况下节省出来内存资源

   

而我们知道一个进程如果在阻塞状态, 那么它的代码和数据就是处于一个空闲的状态。 这个时候操作系统就会将进程的PCB保留, 而进程的代码和数据就会被放到外设当中

   

当下次资源就绪的时候,进程就会被重新唤醒。 那么这个时候代码和数据再次从磁盘放到内存中!而这个过程就叫做换出和换入操作而换出后, 也就是代码和数据在磁盘时, 就叫做挂起状态,这种挂起状态称为阻塞挂起状态那么当它换入时,我们就可以将阻塞挂起状态重新改为运行状态,那么该进程就可以程序被调度了

  


2. linux下的进程状态

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 */
};

 2.1 R运⾏状态(running)

运行状态并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列⾥  

  

我们先简单创建个代码

  运行结果

  

我们再打开一个xshell来查看一下我们的进程

我们再给一个命令让它一直跑起来,每隔一秒查一次

但是我们就发现了,为什么进程里面都是S呢?答案就是因为我们的代码里面有prinft函数,如果进程运行需要1秒的话,假设prinft函数运行需要1纳秒,那么1秒减去1纳秒剩下的时间进程就在等待IO,所以就是S状态,所以我们当前这个进程正在运行队列和等待队列来回切换,也就是正在阻塞状态

  

解决方法就是将printf去掉, 那么就不用打印到外设上, 就不需要等待。 我们再查看进程状态, 进程的状态就是R运行了

     

我们可以看到图中的R后面还有一个 + ,这个 + 的意思是我们的确这个进程启动是在前台启动的

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

我们可以看到,R为0,那么我们只需要在PCB当中将当前状态设置为对应的整数就可以保证为R


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

同理S为0,那么我们也只需要在PCB当中将当前状态设置为对应的整数就可以保证为S,其他的几个状态也是如此

2.2 S睡眠状态(sleeping)

   

睡眠状态意味着进程在等待事件完成(这⾥的睡眠有时候也叫做可中断睡眠(interruptible sleep))

   

在Linux当中,操作系统理论里我们的阻塞状态叫做阻塞,而在Linux内核当中,我们的阻塞状态叫做S,我们看到一个进程卡住不动了,其实就是这个进程当前没有被调度,这个进程正在等待键盘有数据,所以这个状态叫做阻塞状态


2.3 D磁盘休眠状态(深度睡眠)(Disk sleep)

    

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

深度睡眠状态有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束 ,也叫深度睡眠,其实也是一种阻塞状态,我们前面的S也叫做浅度睡眠

浅度睡眠状态也叫做可中断休眠状态,简单来说就是:如果一个进程处于S状态,那么我们可以直接把这个进程杀掉,这个进程会响应我们杀掉它的动作

  

    

深度睡眠其实就是一种不响应操作系统任何请求的状态, 一般的阻塞状态, 当进程停止等待外设后就会进入运行状态, 但是深度睡眠只有当完成了特定的任务, 否则不会响应操作系统的任何命令, 即便系统关机了, 这个进程仍然会自己跑

    

D状态产生的原因是因为进程向磁盘中写入数据,如果我们想要将1G数据写到磁盘中,但是对于磁盘来说, 磁盘写入数据是有可能失败的(磁盘满了或者其他原因), 所以对于进程来说, 他写入数据就不能将数据交给磁盘后不管了, 他要等待磁盘写入的结果。 如果没有写入成功, 可以再写入一次, 或者写入不成功后想其他办法处理数据

     

那么进程就将数据交给磁盘,但是对于进程来说这个期间等待的时间是非常长的,如果这个时候内存满了, 操作系统管理内存, 就势必要杀掉一部分进程,这个过程是必须等

    

而我们的进程在等待磁盘的过程中会处于闲置的状态, 那么就容易被操作系统杀掉,而被操作系统杀掉后, 磁盘就不会找不到进程, 那么他就不会在进程写入数据了(数据丢失)所以, 为了避免这种情况, 就出现了深度睡眠——D状态,只要进程处于D状态,那么这个进程就不可能被杀掉,即便操作系统关机, 只要电源存在, 就可以一直进入,想要结束D状态,只有关掉电源

     

D状态其实也是一种阻塞状态


2.4 T/t暂停状态(stopped)

     

"T (stopped)", /*4 */
"t (tracing stop)", /*8 */

暂停状态(stopped)可以通过发送 SIGSTOP 信号给进程来暂停(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行 

  

暂停状态属于Linux的一种特有状态

  

t是有特殊用途的,主要是用来做debug的


 2.5 X死亡状态(dead)

    

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

死亡状态(dead)这个状态只是⼀个返回状态,你不会在任务列表里看到这个状态   

   

死亡状态其实对应的就是我们系统中的结束状态

  


 2.6 Z僵尸状态(zombie)

   

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

1. 僵死状态(Zombies)是⼀个⽐较特殊的状态。当进程退出并且⽗进程(使⽤wait()系统调⽤,后⾯讲)没有读取到⼦进程退出的返回代码时就会产⽣僵死(⼫)进程

   
2. 僵死进程会以终⽌状态保持在进程表中,并且会⼀直在等待⽗进程读取退出状态代码

   
3. 所以,只要⼦进程退出,⽗进程还在运⾏,但⽗进程没有读取⼦进程状态,⼦进程进⼊Z状态

   

举个例子:比如有一天我们在路上走路,然后我们看到有一个人躺在路边,我们靠近之后发现这个人已经走了好一会了,然后我们就报警打110,警察来了之后就开始封锁现场,警察过来的时候可能还要把法医带过来,然后在这个人身上做一些采样拿回去做化验拿几根头发,什么的,用于判断这个人是自杀还是谋杀还是自然死亡,当法医查完之后,他把在这个人身上获取了法医想获取的有效信息之后,法医就说可以撤了。这个时候呢我们警察才会通知家属啊,准备后事,然后就把人就拉走了

    

那么在他死亡之后到被抬走之前这段时间这个人一直在地上躺着,那么这个人在这段时间里所处的状态叫做僵尸状态,为什么要让这个人处于僵尸状态呢?,是为了获得这个人死亡(退出)时的死亡信息(自杀还是谋杀还是自然死亡),当这个人被警察抬走的时候就变成了X状态

    

//创建维持30秒的僵死进程例⼦
#include <stdio.h>
#include <stdlib.h>
int main()
{pid_t id = fork();if (id < 0) {perror("fork");return 1;}else if (id > 0) { //parentprintf("parent[%d] is sleeping...\n", getpid());sleep(30);}else {printf("child[%d] is begin Z...\n", getpid());sleep(5);exit(EXIT_SUCCESS);}return 0;
}

 如何模拟Z状态

   

我们模拟Z状态的前提条件是我们必须得有父子进程,而且要让这个子进程在退的时候,父进程什么都不干,我们先暂时先不讲父进程怎么解决僵尸状态,我们只需要父进程什么都不管,然后子进程直接退出,如果我们也不获取子进程的退出的信息,那么子进程就必须一直把自己维持在Z状态

     

就好比在路边啊,一个人倒下了那么打110没人来获取这个人的退休结果信息,那么此时,这个人就只能一直在路边躺着,所以我要模拟验证Z状态,我们就要创建父子进程,让Z进程在一定程度上直接退出,子进程退出之后我们就可以查到我们子进程的相关信息了

  

  

观察上面的两张图片,我们发现前面子进程还在正常运行,但是后面就只剩下一个父进程了,观察我们状态的那张图片,我们发现状态里有Z状态

    

  

以上这个情况就是说, 对于一个进程来说, 它在退出的时候, 一定要维持一段时间的僵尸进程, 而只有当父进程或则其他关系进程子进程的资源将这个进程的情况读取到了, 才会去释放这个子进程的资源。 也就是说, 对于僵尸进程来说, 如果父进程一直不去释放它, 那么它就会一直占用着资源,也就导致了内存泄漏


僵尸进程危害 

   

1. 进程的退出状态必须被维持下去,因为他要告诉关⼼它的进程(⽗进程),你交给我的任务,我办的怎么样了。可⽗进程如果⼀直不读取,那⼦进程就⼀直处于Z状态?是的!

   
2. 维护退出状态本⾝就是要⽤数据维护,也属于进程基本信息,所以保存task_struct(PCB)中,换句话说,Z状态⼀直不退出,PCB⼀直都要维护?是的!

    
3. 那⼀个⽗进程创建了很多⼦进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构对象本⾝就要占⽤内存,想想C中定义⼀个结构体变量(对象),是要在内存的某个位置进⾏开辟空间


浅谈

我们目前所讲到的6种状态其实都是某一个进程的子进程,可能是我们自己进程的子进程,也有可能是bash进程的子进程


3. 孤儿进程

如果一个父进程先退出,那么子进程就会被操作系统领养,子进程的父进程会变成操作系统,这个时候子进程就称之为孤儿进程,这个过程就叫做领养

   

为什么需要领养操作?答案是一个进程想要被释放, 就需要父进程,如果没有父进程的话,子进程本身是一个进程,它也需要被释放, 否则就会发生内存泄漏, 所以就需要被领养

  

如果父进程被终止, 子进程仍然会运行

  


完结撒花~

相关文章:

Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿

目录 1. 进程状态的概念 1.1 课本上的说法&#xff1a;名词提炼 1.2 运行&#xff0c;阻塞和挂起 1.2.1 什么叫做运行状态&#xff08;running&#xff09;&#xff1f; 1.2.2 什么叫做阻塞状态&#xff08;sleeping&#xff09;&#xff1f; 1.2.3 什么叫做挂起状态&…...

linux/centOS7用户和权限管理笔记

linux系列中可以&#xff1a; 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别&#xff0c;分别是&#xff1a; 针对用户的权限控制针对用户组的权限控制 一&#xff0c;root用户 root用户拥有最大的系统操作权限&#xff0c;而普通…...

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本&#xff1a;MySQL 服务器系统和 MySQL 嵌入…...

Scala函数的泛型

package hfd //泛型 //需求&#xff1a;你是一个程序员&#xff0c;老板让你写一个函数&#xff0c;用来获取列表中的中间元素 //List(1,2,3,4,5)>中间元素的下标长度/2 >3 //getMiddleEle object Test38_5 {def print1():Unit{println(1)}def print2(): Unit {println(…...

云轴科技ZStack亮相中国生成式AI大会上海站 展现AI Infra新势力

近日&#xff0c;以“智能跃进&#xff0c;创造无限”为主题的2024中国生成式AI大会在上海举办。本次大会由上海市人工智能行业协会指导&#xff0c;智东西、智猩猩共同发起&#xff0c;邀请了人工智能行业的顶尖嘉宾汇聚一堂&#xff0c;以前瞻性视角解构和把脉生成式AI的技术…...

态感知与势感知

“态感知”和“势感知”是两个人机交互中较为深奥的概念&#xff0c;它们虽然都与感知、认知相关&#xff0c;但侧重点不同。下面将从这两个概念的定义、区分以及应用领域进行解释&#xff1a; 1. 态感知 态感知通常指的是对事物当前状态、属性或者内在特征的感知。它强调的是在…...

汽车零部件设计之——发动机曲轴预应力模态分析仿真APP

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天&#xff0c;汽车零部件需…...

谷歌浏览器的网页数据导出与导入方法

谷歌浏览器是全球最受欢迎的网络浏览器之一&#xff0c;它不仅提供了快速、安全的浏览体验&#xff0c;还拥有丰富的功能和扩展程序。本文将详细介绍如何在Chrome浏览器中导出和导入网页数据&#xff0c;同时涵盖一些相关的实用技巧&#xff0c;如调试JavaScript、自动填充表单…...

pytroch环境安装-pycharm

环境介绍 安装pycharm 官网下载即可&#xff0c;我这里已经安装&#xff0c;就不演示了 安装anaconda 【官网链接】点击下载 注意这一步选择just me 这一步全部勾上 打开 anaconda Prompt 输入conda create -n pytorch python3.8 命令解释&#xff1a;创建一个叫pytorch&…...

【大模型】PostgreSQL是向量数据库吗

PostgreSQL&#xff08;通常简称为 Postgre&#xff09;本身并不是一个专门的向量数据库&#xff0c;但它可以通过扩展或插件支持向量数据的存储、检索和处理&#xff0c;因此可以在某些场景下作为向量数据库使用。以下是关于 PostgreSQL 是否可以作为向量数据库的详细说明&…...

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码

目录 一、PyQt5介绍&#xff1a; &#xff08;1&#xff09;PyQt简介&#xff1a; &#xff08;2&#xff09;PyQt API&#xff1a; &#xff08;3&#xff09;支持的环境&#xff1a; &#xff08;4&#xff09;安装&#xff1a; &#xff08;5&#xff09;配置环境变量…...

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…...

Vue导出报表功能【动态表头+动态列】

安装依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader创建export-excel.vue组件 代码内容如下&#xff08;以element-ui样式代码示例&#xff09;&#xff1a; <template><el-button type"primary" click"Expor…...

C#调用python 程序

需要通过nuget安装ironphthon using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Win…...

day11 性能测试(4)——Jmeter使用(黑马的完结,课程不全)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、复习 1.1 断言&#xff08;3种&#xff09; 1.2 关联&#xff08;3种&#xff09; 1.3 录制脚本 2、Jmeter直连数据库 2.1 直连数据库——使用场景 2.2 直连数据库——操作步骤 2.2.1 案例1&…...

机器学习详解(4):多层感知机MLP之理论学习

文章目录 1 MLP知识引入1.1 深度学习的发展1.2 神经元(Neuron)1.3 感知机(Perception)1.3.1 介绍1.3.2 感知机在二分类中的应用1.3.2.1 理论1.3.2.2 感知机计算实例 1.3.3 感知机总结 2 MLP(Multilayer Perceptron)2.1 介绍2.2 反向传播2.2.1 实例2.2.2 反向传播计算实例 3 总结…...

【C++】类中的特殊成员——静态成员,友元成员,常量成员

下图为笔者根据自己的理解做的图&#xff0c;仅供参考~ 文章目录 一.静态成员static*类外 1.1静态数据成员1.2静态函数成员*不同属性下的静态成员 1.3局部静态(Local Static) 二.常量成员2.1常量数据成员2.2常量函数成员2.3常量对象 三.友元成员3.1友元函数3.2友元类友元的特…...

开源 Agent 小屋

知乎&#xff1a;何枝地址&#xff1a;https://zhuanlan.zhihu.com/p/9096314010 Live Demo&#xff08;网站在进入前可能会加载一段时间&#xff0c;需要等一等&#xff09; 人物观测&#xff1a;Agent Life Live Demo[1] 行为统计&#xff1a;Agent Life Action Logging Bo…...

Mina之账户模型

为了能真正提升自己的能力&#xff0c;而不是机械低效的Ctrl C / Ctrl V&#xff0c;先从基本概念入手&#xff0c;利用ChatGPT来弄懂Mina。 Mina Mina Protocol 是一种轻量级区块链&#xff0c;被称为“世界上最轻的区块链”。其目标是通过极小的链上数据大小和强大的隐私…...

STM32 ADC 配置

ADC&#xff08;模数转换器&#xff09;用于将模拟信号转换为数字信号&#xff0c;以便单片机处理。 模数转换器&#xff08;Analog-to-Digital Converter, ADC&#xff09;是电子系统中不可或缺的一部分&#xff0c;它负责将现实世界中的连续物理量&#xff0c;如温度、声音、…...

练9:进制转换

欢迎大家订阅【蓝桥杯Python每日一练】 专栏&#xff0c;开启你的 Python数据结构与算法 学习之旅&#xff01; 文章目录 1 进制转换2 例题分析 1 进制转换 ①任意制转为十进制 【示例】 ②十进制转为任意制 【法一】 【法二】 2 例题分析 题目地址&#xff1a;https:/…...

善于运用指针--函数与指针

文章目录 前言一、函数的指针二、函数指针运用 1函数名地址2指针变量调用函数3指向函数的指针变量做函数参数二、返回指针值的函数总结 前言 如果在程序中定义了一个函数&#xff0c;在编译时会把函数的源代码转换为可执行代码并分配一段空间。这段空间有一个起始地址&#xf…...

Microi吾码低代码平台:前端源码的本地运行探索

文章目录 1.前端源码运行环境要求1.1 操作系统1.2 必备软件工具1.3 项目源码依赖 2.从Git仓库克隆前端源码3.安装项目依赖4.启动本地开发服务器5.常见问题与解决方案5.1 依赖安装失败5.2 端口冲突5.3 代码更新未生效 6.提升本地开发体验的技巧6.1 使用代理解决跨域问题6.2 集成…...

十一、容器化 vs 虚拟化-Docker 使用

文章目录 前言一、Docker Hello World二、Docker 容器使用三、Docker 镜像使用四、Docker 容器连接五、Docker 仓库管理六、Docker Dockerfile七、Docker Compose八、Docker Machine九、Swarm 集群管理 前言 Docker 使用‌ Docker 容器使用、镜像使用、容器连接、仓库管理、Do…...

实践项目2-自动计价电子秤

自动计价电子秤 一、功能说明 基于AVR单片机设计一自动计价电子秤。根据输入的价格以及检测的重量自动计算总价并打印&#xff08;串口模拟&#xff09;。 二、具体要求 1、开机后实时检测重量并显示&#xff1b; 2、通过按键输入并显示价格&#xff0c;具有修改功能&#…...

iOS如何操作更新推送证书

最近收到一份邮件,应该如何操作呢,证书还是跟以前一样冲钥匙串直接申请吗 Hello, As we announced in October, the Certification Authority (CA) for Apple Push Notification service (APNs) is changing. APNs will update the server certificates in sandbox on January…...

WSL2 在vscode无法连接copilot

报错情况&#xff1a; 本机可以使用copilot&#xff0c;但在WSL2上无法连接&#xff0c;报错信息如下&#xff1a; 检查网络情况&#xff1a; ping api.github.com 发现无法连接&#xff1a; github.com:Temporary failure in name resolution 在网上搜集的解决方法&#…...

HTA8998 实时音频跟踪的高效内置升压2x10W免电感立体声ABID类音频功放

1、特征 输出功率(fIN1kHz,RL4Ω&#xff0c;BTL) VBAT 4V, 2x10.6W(VOUT9V,THDN10%) VBAT 4V, 2x8.6W (VOUT9V,THDN1%) 内置升压电路模式可选择:自适应实时音频跟踪 升压(可提升播放时间50%以上)、强制升压 最大升压值可选择&#xff0c;升压限流值可设置 ACF防破音功能 D类…...

用ChatGPT-o1进行论文内容润色效果怎么样?

目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果&#xff0c;为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…...

《探索 Jetpack Compose:构建现代化 Android UI 的利器》

Jetpack Compose 是谷歌推出的现代化 UI 框架&#xff0c;用于简化 Android 应用开发中的 UI 构建。它使用声明式编程方式&#xff0c;允许开发者以简洁直观的方式创建动态和响应式的 UI。本文将从基础概念到进阶用法&#xff0c;带你全面了解 Compose 的核心功能和使用技巧。 …...

深圳酒店设计公司/班级优化大师官方网站

接前贴&#xff1a;今年&#xff08;2021年&#xff09;7月4日至24日&#xff0c;我指导电子信息工程专业18级的12位同学进行小学期的课程实践。其中&#xff0c;王同学、万同学、高同学等3位同学完成了基于广东高云&#xff08;GOWIN Semiconductor&#xff09;FPGA的DDS实现。…...

老实人做网站/简单网页设计模板html

传送门 **dfs思路&#xff1a;**根据题目的描述&#xff0c;镜像对称&#xff0c;就是左右两边相等&#xff0c;也就是左子树和右子树是相等的。因此采用两个指针p&#xff0c;q分别指向左右两颗子树&#xff0c;在每次递归时候就判断一下当前节点是否相等&#xff0c;不相等则…...

app界面设计欣赏网站/推广普通话绘画

The information in this article applies to:- Microsoft SQL Server 7.0,2000数据库日志文件丢失时的恢复步骤Revision History:VersionDateCreatorDescription1.0.0.12003-3-25郑昀草稿 Implementation Scope&#xff1a;本文是用于向Microsoft SQL Server维护人员描述我误删…...

北京做网站建设/排名优化百度

那些类似“比尔盖茨女婿”的整合资源、一夜成名或暴富的神话&#xff0c;你听听就算了。每采访一个投资人&#xff0c;我都会问一个问题&#xff1a;你最欣赏什么样的创业者&#xff1f;得到最多的答案是&#xff1a;要具有整合资源的能力。同时也不难发现&#xff0c;有越来越…...

丹东谁做微网站/深圳seo优化培训

小伙伴们&#xff0c;我们分享继续哦第一节进程和线程https://www.bilibili.com/video/BV137411V7Y1/?p1951.1 进程和线程程序Program是一段静态的代码&#xff0c;它是应用程序执行的蓝本进程Process是指一种正在运行的程序&#xff0c;有自己的地址空间进程的特点动态性并发…...

自己做h5网站/全国疫情高峰感染高峰

与Non-mutating Algorithms相比&#xff0c;变易算法能修改容器元素数据&#xff0c;可进行序列数据的复制、交换、替换、填充、移除、旋转、随机抖动、分割。还是参考叶至军的那本书以及网站Cplusplus.com copy 元素复制。该函数用于容器间元素拷贝&#xff0c;将迭代器区间[…...