进程状态(R|S|D|t|T|X|Z)、僵尸进程及孤儿进程
文章目录
- 一.进程状态
- 进程排队
- 状态:运行、阻塞、挂起
- 二.Linux下的进程状态
- R 运行状态(running)
- S 睡眠状态(sleeping)
- D 磁盘休眠状态(Disk sleep)
- t 停止、暂停状态(tracing stopped)
- T 停止、暂停状态(stopped)
- X 死亡状态(dead)
- 三.僵尸进程 Z(zombie)
- 四.孤儿进程
一.进程状态
操作系统的基本职责是控制进程的执行,这包括确定交替执行的方式和给进程分配资源。在设计控制进程的程序中,第一步就是描述进程所表现出的行为。
一般来说,有三种进程状态模型:三状态模型、五状态模型和七状态模型。
每个操作系统的具体实现都是在这些模型的基础上进行设计的,其中最核心的就是三状态模型。五状态模型在三状态模型的基础上添加了创建态和结束态。七状态模型在五状态模型的基础上添加了挂起状态。
运行态:进程占有CPU,并在CPU上运行
就绪态:一个进程已经具备运行条件,但没有分配CPU,暂时不能运行。当调度到CPU时可以立刻运行。
等待态:(阻塞态、封锁态、睡眠态),进程因某个事件发生而不能立即运行。即使CPU空闲,该进程也不可运行。
进程排队
一个进程,自创建之后不是一直在CPU上面运行的,操作系统会基于时间片来轮流执行进程,以保证每个进程都能运行。单CPU下,同一时间只能一个进程运行,那么必然会出现进程排队,出现排队一定是在等待某种资源,可能是时间片,也可能是软硬件资源。
只要排队,肯定是进程的PCB即task_struct
在排队,那么就要将其组织到队列中。实际上,task_struct
可以被连入多个数据结构中:双链表,队列等等,不同以往,若仅想将task_struct
组织到一个数据结构例如链表中,只用直接将其封装起来:
struct list{task_struct *_next;task_struct *_prev;
}
但要将其放入多个数据结构中,仍这样组织,操作系统不仅要维护PCB,还要维护各种链表队列,有些冗杂。在Linux中,直接将链表结点、队列结点封装到task_struct
中间,这样操作系统对进程的管理就只会对PCB进行管理,不会涉及其他的数据结构。
struct task_struct {//...//指向运行队列的指针struct list_head run_list; //用于将系统中所有的进程连成一个双向循环链表, 其根是init_taskstruct task_struct *next_task, *prev_task;//...
};
每个CPU会维护一个运行队列,当访到某一进程的
run_list
结点时,这结点是整个PCB的一个成员,那么怎么问其他数据呢❓
拿一个简单的结构体来说:
struct S{int a;int b;int c;
};
知道&c
怎么得到&S
呢?&c = &S + 偏移量
,结构体成员越靠后,那么偏移量就越大,同时取地址取的是低地址,那么只要根据首地址和偏移量就可以得到所有成员的数据了。小到int
大到struct
都是这样的。
在Linux内核中是这样实现的:&n - &((task_struct*)0->n)
,这样就能得到task_struct
对象的首地址了。
状态:运行、阻塞、挂起
所谓状态,本质就是一个task_struct
中的整型变量,不同状态对应不同的整数值。
//说明了该进程是否可以执行,还是可中断等信息
volatile long state;
状态决定了进程的后续动作
-
运行态
一个CPU管理一个运行队列,只要进程在运行队列排队,那么其都在运行状态。
-
阻塞态
操作系统对硬件管理也是先描述再组织,每个硬件也有其数据结构。当进程需要某种资源例如硬件资源时,但是资源没有就绪,则会先出运行队列,随后进入该硬件对象中的等待队列,此时该进程进入阻塞状态,即使CPU空闲,也不会进入CPU的运行队列。 -
挂起态
挂起不常见,这里谈一下阻塞挂起。
前提是计算机资源吃紧,磁盘中有一块SWAP分区
,当内存吃紧,由于操作系统为了提供安全稳定的环境,这时会将阻塞进程对应的代码数据唤出到磁盘中的SWAP分区
,为了之后的唤入做准备。当内存资源不再吃紧,会将代码数据再唤入内存中。这里的唤入唤出,不会对PCB进行交换。
一般来说,SWAP分区
不要超过内存大小,由于访问外设的速度慢,唤入唤出就是用效率换稳定,若SWAP分区
太大,系统I/O频率会高,操作系统效率会变低。
二.Linux下的进程状态
为了方便查看进程状态,使用以下指令来循环ps ajx
while : ; do ps axj | head -1 && ps axj | grep myprocess | grep -v grep; sleep 1; done
下面的状态在kernel源代码里定义:
/*
* The task state array is astrange "bitmap" of
* reasons to sleep. Thus"running" is zero, and
* you can test for combinationsof others with
* simple bit tests.
*/
static const char * consttask_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 */
};
Linux 内核中的进程状态是一个指针数组static const char * consttask_state_array[]
。
R 运行状态(running)
并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
在Linux中没有就绪态,将其也视为运行态。
下面运行下面一个程序让其变为进程,并通过指令查看该进程的状态:
#include <stdio.h>
#include <unistd.h>int main()
{while (1) {printf("Hello!\n");sleep(1);}return 0;
}
该进程一直在循环,其进程状态应该是R
,但是结果却与猜想不一致,发现其状态是S
(睡眠状态)。
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
343984 345559 345559 343984pts/0 345559 S+ 0 0:00 ./myprocess
这是因为这段代码中有printf
,打印到显示器上显然需要访问外设,这时操作系统会将该进程状态改为阻塞状态并放入显示器的等待队列中,等待相比打印是漫长的,很难抓取到该进程状态为R
的时刻。这时只留一个死循环,再运行就可以了。
int main()
{while (1) {}return 0;
}
由于该程序不会进行任何I/O操作,自然其一直在运行队列。这里的R
就代表该进程一直在运行状态,+
表示其为前台进程,可以通过ctrl+C
来结束进程;若没有则表示后台进程,那么就不可以了。
PPID PID PGID SIDTTY TPGID STAT UID TIME COMMAND
343984 346537 346537 343984pts/0 346537 R+ 0 0:05 ./myprocess
S 睡眠状态(sleeping)
睡眠状态对应操作系统概念中的阻塞态,意味着进程在进程在等待事件完成。
S为可中断睡眠|浅度睡眠
除了上面进程因等待外设而进入睡眠状态,也可以使用sleep
函数让进程睡眠。
#include <stdio.h>
#include <unistd.h>int main()
{while (1){sleep(1);}return 0;
}
查看该进程状态为S+
。
PPID PID PGID SIDTTY TPGID STAT UID TIME COMMAND
343984 347903 347903 343984pts/0 347903 S+ 0 0:00 ./myprocess
由于其为可中断睡眠,可以通过kill -19
将其唤醒
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
343984 348168 348168 343984pts/0 348168 S+ 0 0:00 ./myprocessPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
343984 348168 348168 343984pts/0 343984 T 0 0:00 ./myprocess
D 磁盘休眠状态(Disk sleep)
对应阻塞态。也叫不可中断睡眠状态,在这个状态的进程通常会等待IO的结束。
通常来说进程的睡眠状态都为浅度睡眠状态,但当一个进程向磁盘写入大量数据时,写入过程很漫长,进程需要一直处在阻塞态,如果这个过程被打断,很容易出现磁盘数据和内存数据不一致的情况。操作系统当内存严重吃紧的时候,会终止一些在阻塞态过长的进程,但其实这个时候该进程还在等待磁盘写入的结果,这种状态肯定是不稳定的。
为了避免这种情况,当一个进程在向磁盘进行读写时,为了保证内存数据和磁盘数据一致,在接收到磁盘读写结果之前,该进程一直会处在D
状态,不可以被打断。
若进程处于D
状态,即使使用kill -9
也无法将该进程终止。
t 停止、暂停状态(tracing stopped)
对应阻塞态,该状态也被称为调试状态。
当调试一个程序时,在断点处进程暂停,此进程为t
状态
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND662865 662893 662893 661630 pts/0 662865 t 0 0:00 /root/learning/Linux-learning/Process/myprocess
T 停止、暂停状态(stopped)
对应阻塞态,当进程有危险操作时会被暂停。
可以通过发送19信号,让进程暂停:kill -19 (进程PID)
PPID PID PGID SIDTTY TPGID STAT UID TIMECOMMAND
661630 663368 663368 661630 pts0 661630 T 0 0:00 .myprocess
X 死亡状态(dead)
对应结束态,当一个进程结束时产生的状态。这个状态只是一个返回状态,不会在任务列表里看到这个状态。
三.僵尸进程 Z(zombie)
对应结束态,X状态之前的状态
进程创建出来完成任务后,不会立即死亡即为X
状态,而是会先变成Z
状态,若其父进程不进行回收,则会一直处在Z
状态。
这是由于父进程需要知道子进程执行的情况,此时,该进程的代码和数据会被直接释放,但保留PCB在内存中供父进程读取子进程执行情况,例如exit_state,exit_code,exit_signal
。
下面模拟僵尸进程,当子进程结束,父进程不退出也不读取子进程的执行情况即不进行回收,此时子进程将一直保持Z
状态:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>int main()
{pid_t id = fork();if (id == 0){ // 子进程一共会存在5秒钟int cnt = 5;while (cnt--){printf("I'm child process. \n");sleep(1);}printf("I'm child process, zombie to be checked.\n");exit(0); // 子进程直接退出}else {// 父进程不结束也不回收子进程while (1){sleep(1);}}return 0;
}
root@hcss-ecs-e6eb:~/learning/Linux-learning/Process# ./myprocess
I'm child process.
I'm child process.
I'm child process.
I'm child process.
I'm child process.
I'm child process, zombie to be checked.
661630 669793 669793 661630 pts0 669793 S+ 0 0:00 .myprocess
669793 669794 669793 661630 pts0 669793 Z+ 0 0:00[myprocess] <defunct>
此时父进程不读取且不退出,那么子进程的PCB
就会一直在内存中,造成内存泄漏。
四.孤儿进程
孤儿进程就是其父进程推出了,该进程仍然存在。
下面让父进程3秒后就退出,观察细节
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>int main()
{pid_t id = fork();if (id == 0){// 子进程不退出while (1){printf("I'm child process, PID:%d, never stop.\n", getpid ());sleep(1);}}else {// 父进程3秒后退出int n = 3;while (n){printf("I'm father process, PID:%d, %d left.\n", getpid (), n--);sleep(1);}exit(0);}return 0;
}
下面是父进程退出前后的表现:
I'm father process, PID:677010, 3 left.
I'm child process, PID:677011, never stop.
I'm father process, PID:677010, 2 left.
I'm child process, PID:677011, never stop.
I'm father process, PID:677010, 1 left.
I'm child process, PID:677011, never stop.
I'm child process, PID:677011, never stop.
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND676915 677010 677010 676915 pts/0 677010 S+ 0 0:00 ./myprocess677010 677011 677010 676915 pts/0 677010 S+ 0 0:00 ./myprocessPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND1 677011 677010 676915 pts/0 676915 S 0 0:00 ./myprocessPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND1 677011 677010 676915 pts/0 676915 S 0 0:00 ./myprocess
子进程的ppid直接变为1,通过指令查看该进程为:
PPID PID PGID SIDTTY TPGID STAT UID TIMECOMMAND0 1 1 1 ? -1 Ss 0 1:18 /lib/systemd/systemd --system --deserialize 41 noibrs
这个1号进程,就是Linux启动后,第一被创建的用户进程。把1号进程领养的程,称之为孤儿进程,此时只有发9
信号或者系统关机才可以使该进程结束。
相关文章:
进程状态(R|S|D|t|T|X|Z)、僵尸进程及孤儿进程
文章目录 一.进程状态进程排队状态:运行、阻塞、挂起 二.Linux下的进程状态R 运行状态(running)S 睡眠状态(sleeping)D 磁盘休眠状态(Disk sleep)t 停止、暂停状态(tracing stopped)T 停止、暂停状态(stopp…...
Docker 搭建 Gitlab 服务器 (完整详细版)
参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...
Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入
作者:来自 Elastic Dai Sugimori 了解稀疏向量嵌入,理解它们的作用/含义,以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能,允许用户使用自然语言进行查询并检索相关信息。为此,目标文档和查询必须首先…...
huggingface部署本地大模型DeepSeek-R1-Distill-Llama-70B使用streamlit构建交互式 Web 应用
文章目录 一、Streamlit介绍二、模型下载三 、模型部署四、效果展示 一、Streamlit介绍 Streamlit 是一个开源的 Python 库,专门用于快速构建和部署交互式 Web 应用程序,尤其适合数据科学和机器学习领域。以下是关于 Streamlit 的详细介绍: …...
中华人民共和国著作权法
目录 中华人民共和国著作权法 第一章 总则 第二章 著作权 第一节 著作权人及其权利 第二节 著作权归属 第三节 权利的保护期 第四节 权利的限制 第三章 著作权许可使用和转让合同 第四章 与著作权有关的权利 第一节 图书、报刊的出版 第二节 表 演 第…...
Maven 从下载到实战:一站式配置与使用指南
一、Maven 简介 Maven 是一款基于 POM(Project Object Model) 的 Java 项目管理工具,支持依赖管理、构建自动化、标准化项目结构等功能。其核心优势包括: 依赖管理:自动下载和管理第三方库(JAR 包…...
4部署kibana:5601
kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,, 是一个开源和免费的工具 Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面, 可以帮你汇总、分析和搜索重要数据日志 1.安装-所有的es节点 # tar xf kibana-6.4.1-linux-x86_64.t…...
前端项目配置 Nginx 全攻略
在前端开发中,项目开发完成后,如何高效、稳定地将其部署到生产环境是至关重要的一步。Nginx 作为一款轻量级、高性能的 Web 服务器和反向代理服务器,凭借其出色的性能和丰富的功能,成为了前端项目部署的首选方案。本文将详细介绍在…...
Nmap网络安全审计
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 Nmap网络安全审计 什么是Nmap Nmap是由Gordon Lyon设计并实现的,于1997开始发布。最初设计Nmap的目的只是希望打造一款强大的端口扫描工具。但是随着…...
deepseek sse流式输出
链接 semi-ui-vue聊天组件 - 可以用这个组件优化界面 sse服务端消息推送 webflux&webclient Hi-Dream-Blog - 参考这个博客,可以在后台将markdown语法转为html 文章目录 链接效果代码pom.xmlDeepSeekControllerWebConfigDeepSeekClientAiChatRequestAiChatM…...
opencv(6): 形态学操作(二值化、自适应阈值、开闭、对比度)
如何在图片中识别出一些物体的位置。具体是什么不是形态学的范畴。 处理方法基本是对二进制图像进行处理。 卷积核决定着图像处理后的效果。 图像二值化 将图像的每个像素变成两种值, 如 0, 255。 全局二值化:全局按照某个阈值二值化 局部…...
P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值--完全 “二叉树” 不一定是 “满二叉树”
P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 题目分析代码 题目 分析 我吧完全二叉树记成满二叉树了^^ 又卡我几分钟 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <qu…...
Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战
文章目录 Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战引言一、案例背景1.1 需求分析1.2 数据准备1.2.1 模拟数据生成代码二、数据处理全流程2.1 数据清洗2.1.1 缺失值处理2.1.2 异常值检测2.2 核心指标计算2.2.1 营业额分析2.2.2 门店表现评估2.2.3 菜…...
深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分
目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…...
Rust 中的内部可变性与 `RefCell<T>`
一、为什么需要内部可变性? 通常,Rust 编译器通过静态分析确保: 同一时刻只能存在一个可变引用,或任意多个不可变引用;引用始终保持有效。 这种严格的借用规则使得许多内存错误在编译阶段就能被捕获,但也…...
Android Audio实战——音频相关基础概念(附)
Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…...
【Java项目】基于Spring Boot的教师人事档案管理系统
【Java项目】基于Spring Boot的教师人事档案管理系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:此系统的功能分为教师和管理员模块: 1、教师后台功能模块包括:首页、个人中心、个人档案管理、奖惩信…...
MySQL 中表和视图的关系
MySQL 中表和视图的关系 在 MySQL 中,表(Table) 是数据库中的基本存储结构,实际存储数据。而 视图(View) 是基于表或其他视图的虚拟表,它不存储数据,而是存储一条 SQL 查询的定义&a…...
BigDecimal线上异常解决方案:避免科学计数法输出的坑
文章目录 问题背景为什么BigDecimal会输出科学计数法?线上异常场景场景1:数据传递异常场景2:日志记录异常场景3:数据存储异常 解决方案1. 使用toPlainString()方法2. 设置格式化输出3. 自定义工具类 代码示例总结 在Java开发中&am…...
网络运维学习笔记(DeepSeek优化版)004网工初级(HCIA-Datacom与CCNA-EI)Console管理台使用、登录认证、破解恢复密码
文章目录 Console管理台使用、登录认证、破解恢复密码一、Console管理台使用和登录认证1.1 思科设备配置1.1.1 基本配置流程1.1.2 验证配置 1.2 华为设备配置1.2.1 本地密码认证1.2.2 AAA认证配置 二、远程管理协议Telnet和SSH配置2.1 思科Telnet基本配置2.2 华为Telnet基本配置…...
vmware系统磁盘扩容
扩展磁盘 关闭系统 编辑虚拟机设置,点击磁盘进行扩展 若无法点击检查是否有快照,若报错“在部分链上无法执行所调用的函数,请打开父虚拟磁盘”可查看解决方案 内部挂载 扩展分区 fdisk /dev/sda输入p,打印当前分区表删除/dev/…...
数据结构(陈越,何钦铭) 第四讲 树(中)
4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…...
OpenGL进阶系列19 - OpenGL SuperBible - basicfbo 例子学习
一:概述 在超级宝典之前的例子中,程序执行的所有渲染操作都是针对一个窗口,或者可能是计算机的主显示屏。片元着色器(fragment shader)的输出进入后台缓冲区(back buffer),而这个缓冲区通常由操作系统或窗口系统管理,并最终显示给用户。 当我们为渲染上下文选择格式时…...
猿大师播放器:交通水利、公安消防Web端Vue网页播放20路RTSP H.265 1080P监控视频流
随着互联网技术的飞速发展,视频监控已成为各行各业不可或缺的一部分。无论是交通物流、公安消防,还是水利农业、园区校园,视频监控都扮演着至关重要的角色。然而,传统的视频监控解决方案往往依赖于特定的客户端软件,这…...
文件下载技术的终极选择:`<a>` 标签 vs File Saver.js
文件下载技术的终极选择:<a> 标签 vs File Saver.js 在 Web 开发中,文件下载看似简单,实则暗藏玄机。工作种常纠结于 <a> 标签的原生下载和 File Saver.js 等插件的灵活控制之间。本文将从原理、优缺点、场景对比到实战技巧&…...
IDE(集成开发环境)
IDE(集成开发环境) 1. IDE 的定义 全称:Integrated Development Environment(集成开发环境)。中文:集成开发环境。作用:为程序开发提供全面的开发环境,集成了多种工具和服务&#x…...
数据安全_笔记系列02:国密算法(商用密码算法)详解
数据安全_笔记系列02:国密算法(商用密码算法)详解 国密算法是中国国家密码管理局(现国家密码管理局)制定的一系列自主可控的密码算法标准,旨在保障国内信息安全,满足合规要求。以下从 算法类型、技术细节、…...
全面汇总windows进程通信(三)
在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: RPC(远程过程调用,Remote Pr…...
Python爬虫-破解字体加密技术
前言 本文是该专栏的第77篇,后面会持续分享python爬虫干货知识,记得关注。 字体加密是一种常见的反爬虫技术,通过自定义字体文件和字符映射来保护网页内容,防止爬虫直接获取文本信息。 而本文,笔者将针对“如何解决目标平台的字体加密技术,并获取目标数据”,进行详细介…...
Pytorch实现论文:基于多尺度融合生成对抗网络的水下图像增强
简介 简介:提出了一种新型的水下图像增强算法,基于多尺度融合生成对抗网络,名为UMSGAN,以解决低对比度和颜色失真的问题。首先经过亮度的处理,将处理后的图像输入设计的MFFEM模块和RM模块生成图像。该算法旨在适应各种水下场景,提供颜色校正和细节增强。 论文题目:Und…...
【Python量化金融实战】-第1章:Python量化金融概述:1.1量化金融的定义与发展历程
本小节学习建议:掌握Python编程、统计学(时间序列分析)、金融学基础(资产定价理论)三者结合,是进入量化领域的核心路径。 👉 点击关注不迷路 👉 点击关注不迷路 文章目录 1.1 量化金…...
大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)
Paimon的下载及安装,并且了解了主键表的引擎以及changelog-producer的含义参考: 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join,集成mysql cdc等参考: 大数据组件(四)快速入门实时数据…...
【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》
论文链接 1. 背景与动机 语言空间与推理的矛盾 目前大多数大语言模型(LLMs)在解决复杂问题时采用链式思维(Chain-of-Thought, CoT)方法,即利用自然语言逐步推导出答案。然而,论文指出: 自然语言…...
Linux-CentOS 7安装
Centos 7镜像:https://pan.baidu.com/s/1fkQHYT64RMFRGLZy1xnSWw 提取码: q2w2 VMware Workstation:https://pan.baidu.com/s/1JnRcDBIIOWGf6FnGY_0LgA 提取码: w2e2 1、打开vmware workstation 2、选择主界面的"创建新的虚拟机"或者点击左上…...
【Web RCE 漏洞常见类型】
Web RCE 漏洞常见类型 1. 注入类漏洞2. 反序列化漏洞3. 文件处理漏洞4. 模板引擎漏洞5. 服务端请求伪造(SSRF)6. 框架/中间件漏洞7. 第三方组件漏洞8. 配置不当与协议滥用9. 其他边缘场景防御建议 以下是可以导致远程代码执行(RCE)…...
【蓝桥杯单片机】第十三届省赛第二场
一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存…...
【够用就好006】-PC桌面管理ECS服务器的实操步骤
背景介绍解决思路拓展知识 背景介绍 #够用就好#知其然知其所以然#aigc创意人左边 我计划搭建个人网站,计划格式化我的ECS服务器,但是里面有我之前的实践项目,我舍不得删除,我想要保存到本地。 通常我都是在vscode中用remotes ssh…...
Spring Boot 2/3.x 中 MultipartFile 接收问题深度解析与实战解决方案
文章目录 引言:文件上传的暗礁与应对一、核心机制解析1.1 多部分请求处理流程1.2 关键配置参数演进 二、典型问题排查与修复2.1 文件接收为null问题2.2 大文件上传内存溢出 三、版本差异陷阱3.1 Jakarta Servlet API迁移影响3.2 默认配置变更对比 四、高级问题解决方…...
MySQL的三种并发问题和四种隔离级别
阅读之前,请心里默念,脏读、不可重复读、幻读是三种常见的并发问题,隔离级别是应对并发问题的四种隔离级别,隔离级别和并发问题是两个东西,不要混淆。 在数据库事务中,脏读(Dirty Readÿ…...
【复习】Redis
数据结构 Redis常见的数据结构 String:缓存对象Hash:缓存对象、购物车List:消息队列Set:点赞、共同关注ZSet:排序 Zset底层? Zset底层的数据结构是由压缩链表或跳表实现的 如果有序集合的元素 < 12…...
【Docker】如何在Linux、Windows、MacOS中安装Docker
Linux安装Docker 在终端中执行一键安装脚本命令安装dockersudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun1.1 配置docker镜像源 在终端执行 一行命令,编辑配置文件sudo tee /etc/docke…...
Linux System V - 消息队列与责任链模式
概念 消息队列是一种以消息为单位的进程间通信机制,允许一个或多个进程向队列中发送消息,同时允许一个或多个进程从队列中接收消息。消息队列由内核维护,具有以下特点: 异步通信:发送方和接收方不需要同时运行&#x…...
k2路由器登录校园网
教程1刷入Breed,并手动刷入Padavan固件:斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址: 我用的是: Padavan 登录的网址是 192.168.123.1 Padavan配置教程: 先用网线连上校园网&#…...
Docker基础实践与应用举例
Docker 是一个轻量级容器化平台,通过将应用及其依赖打包到容器中,实现快速部署和环境一致性。以下是 Docker 的实践与应用场景举例,结合具体操作步骤: 一、基础实践 1. 快速启动一个容器 # 运行一个Nginx容器,映射宿…...
EndNote与Word关联:科研写作的高效助力
在科研领域,文献管理与论文写作是紧密相连的重要环节。EndNote作为一款强大的文献管理工具,与Word实现有效关联后,能极大地提升科研写作效率。本文将详细介绍EndNote与Word关联的方法、关联后的优势、常见问题及解决办法,助力科研…...
用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
DeepSeek R1 的完整训练流程核心在于,在其基础模型 DeepSeek V3 之上,运用了多种强化学习策略。 本文将从一个可本地运行的基础模型起步,并参照其技术报告,完全从零开始构建 DeepSeek R1,理论结合实践,逐步…...
SOME/IP-SD -- 协议英文原文讲解2
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.2 S…...
Matlab——图像保存导出成好看的.pdf格式文件
点击图像的右上角,点击第一个保存按钮键。...
Mybatis常用动态 SQL 相关标签
1. <if> 用于条件判断,当满足条件时执行对应的 SQL 片段。 示例: <select id"findUser" resultType"User">SELECT * FROM usersWHERE 11<if test"name ! null and name ! ">AND name #{name}</if><if…...
计算机网络与通讯知识总结
计算机网络与通讯知识总结 基础知识总结 1)FTP:文件传输 SSH:远程登录 HTTP:网址访问 2)交换机 定义:一种基于MAC地址实现局域网(LAN)内数据高速转发的网络设备,可为接入设备提供独享通信通道。 - 核心功能: 1.数据链路层(OSI第二层)工作,通过MAC地址…...