Linux——进程终止/等待/替换
前言
本章主要对进程终止,进程等待,进程替换的详细认识,根据实验去理解其中的原理,干货满满!
1.进程终止
概念:进程终止就是释放进程申请的内核数据结构和对应的代码和数据
进程退出的三种状态
- 代码运行完毕 结果正确
- 代码运行完毕 结果错误
- 代码中止异常
我们在学习C语言的时候,写main函数,一般都会写return 0;main函数的返回值,通常就代表程序的执行情况,0代表成功,非0代表代码运行完毕,结果错误,不同的值代表不同的错误
当父进程创建子进程是为了让子进程完成某种任务,当子进程结束,肯定要将执行结果返回给父进程,让父进程知道是什么情况,我们知道子进程结束会保留task_struct,等待父进程获取结果信息,此时子进程就是僵尸进程,执行结果,也就是返回值就会存放到task_struct中,被父进程获取
1.1退出码
进程结束返回的一个状态 通常是一个整数值
echo $?
打印最近一个进程退出时的退出码
errno:当库函数调用失败或者系统调用失败 他们通常会将一个特定的错误代码赋值给errno
strerror是C语言的一个库函数,该函数接收一个errno的错误代码作为参数, strerror负责将这些错误代码转换为具体的错误描述信息,一共有134条
我们可以看到0表示成功 1表示操作不被允许 2表示没有这个目录或文件 3表示没有这个进程
相信后面的大家也可以读懂 这样我们就可以根据退出码知道我们的错误是什么了
此时在当前目录并没有c.txt文件,ls是C语言写的一个程序,当执行完程序,发现文件不存在,此时的退出码是2,不就是上面的2号找不到文件吗
1.2进程常见的退出方法
1.2.1从main返回
我们知道main函数是程序的入口,当main函数结束,也return了,进程也就结束了
其他的函数只表示调用函数完成了 返回退出码 并不代码进程结束
1.2.2exit
exit手册内容 exit是直接结束进程,引起进程终止 它需要一个参数,就是状态(进程退出码)
1.2.3_exit
_exit手册内容 用于终止进程的系统调用 通过实验我们发现和exit一样都可以终止进程
1.2.4exit和_exit区别
补充:我们知道只有OS才可以杀掉进程 库和系统调用是上下层的关系 库调用系统调用
相同点:都可以终止进程
不同点:
- exit是标准C库函数 _exit是系统调用
- exit会刷新缓冲区 _exit不会刷新缓冲区
实验:通过下面的实验我们也可以验证exit不会刷新缓冲区
2.进程等待
在理解进程等待前,我们先来想一下进程为什么要进行等待呢?
- 回收子进程资源(处理僵尸进程)
- 获取子进程退出信息
我们知道当子进程退出时,task_struct不会被释放,需要父进程回收资源,当父进程一直不管时,就可能会造成僵尸进程,可能会出现内存泄露
2.1wait
手册内容:wait的参数status是一个输出型参数 在后续的waitpid我们会详细了解
wait会等待任意一个子进程 回收成功会返回回收的pid
接下来我们来使用一下wait
创建一个子进程 让他跑五次 当子进程结束时,让程序暂停10s,这个时候父进程还没有回收资源,所以子进程此时就是僵尸进程,根据子进程状态我们可以看到是Z,父进程回收子进程资源,解决了僵尸进程,返回了子进程的pid,子进程资源被全部释放,剩余父进程,程序再休眠10s,最后父进程进程也结束
2.2waitpid
pid_t waitpid(pid_t pid, int *status, int options); waitpid共有三个参数
接下来会一个一个拆开分析:
2.2.1pid_t pid
pid_id的值有四种
等待指定pid或者等待任意子进程
如果等待失败 会出现什么样的情况呢?
2.2.2int *status
输出型参数 存储进程退出时的状态信息 不关心状态信息设置NULL
我们来进行测试一下:发现出现了一些问题
status不能当做整型看待,可以当做位图来看待,前16位不考虑,次8位是退出状态,那么此时应该前7位是0,然后是1,后面还有8个0,因为是2进制,所以应该是2的8次方,也就是256!
当除数为0时就会使程序出现异常
其实exit code 和 exit signal都存放在子进程的task_struct中,当子进程是僵尸进程,等待父进程通过操作系统调用回收子进程资源,获取子进程的退出信息
我们在上述的实验是通过位操作来提取信息的,真正的OS是使用宏,其实就是封装了一下位操作
- WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是
否是正常退出,程序是否异常,=0为真)
- WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的
退出码)

2.2.3int options
补充:
- 阻塞调用:当一个程序发起操作时,程序会暂停操作,直到这个操作完成并返回结果,在执行操作时,程序不能做任何事,也就是子进程在执行任务时,父进程一直在wait阻塞
- 非阻塞调用:当一个程序发起操作,不会等操作完成,而是立即返回,执行后续的操作,程序可以定期检查这个操作是否已经完成,这个操作叫做非阻塞轮询
我们从手册里可以看到options是有几个选项的
- 默认是0:阻塞调用,如果子进程还没有退出父进程就会一直阻塞在那里
- WNOHANG:非阻塞调用
waitpid的返回值可以是 -1 0 >0
-1表示失败
0表示 调用结束 但是子进程没有退出
>0 子进程结束
非阻塞轮询实验,将waitpid的第三个参数设置为WNOHANG,非阻塞调用,这样父进程就不会一直等待子进程完成任务,而是立即返回,然后定期去询问子进程完成任务了吗?
非阻塞调用实验:我们可以通过函数指针回调函数来操作
通过实验我们可以看到在子进程执行任务时,父进程也在执行其他任务
3.进程替换 exec
进程替换就是OS根据指定的程序文件路径和参数,将新程序的代码和数据加载到当前进程的地址空间中,覆盖原来的进程内容,从而实现进程替换
程序替换错误返回-1 没有成功返回值
当我们知道程序替换会将原先的程序进行覆盖,我们原先的程序就没有了,所以我们一般会创建子进程去执行程序替换,这样父进程的代码数据也不会丢失了!!
3.1进程替换的原理
我们先来使用一下execl,我们可以发现第一句printf执行了,然后执行程序替换,然后就没有输出了,我们来了解一下程序替换的原理!其实在上面就已近谈到了,就是将新程序的代码和数据加载到当前进程的地址空间中,覆盖替换原来的进程内容,从而实现进程替换
在程序替换的过程中,并没有创建新的进程
3.2程序替换接口函数
我们在上面的手册中可以看到6个接口函数,接下来我们学习四个 后续的大家肯定就都懂
还有一个是系统命令 execve 我们在上面看到的6个接口函数其实都是需要去调用execve
在上层进行封装 为了应对各种各样的场景 最后会统一转化 调用系统调用execve
3.2.1execl
int execl(const char *path, const char *arg, ...);
execl的l可以看做是一个list,第一个参数就是路径+程序名,第二个参数就是命令,在命令行怎么写,这里我们就怎么写,...是可变参数列表的意思,因为我们不知道命令有几个,最后要以NULL结尾,表明参数已传完!!
3.2.2 execlp
int execlp(const char *file, const char *arg, ...);
execlp的l看做list,p看做PATH,第一个参数就是要执行的文件名,execp会自动在环境变量PATH中查找命令,第二个参数就是命令,同上!
3.2.3execv
int execv(const char *path, char *const argv[]);
execv的v可以看做是一个vector,第一个参数是要执行的路径+文件名,第二个参数是一个指针数组,也就是命令行参数表
3.2.4execvp
int execvp(const char *file, char *const argv[]);
execvp的v可以理解为vector,p理解为PATH,第一个参数就是要执行的文件,第二个是指针数组,就是指命令行参数表,相信大家看到这里一看就看懂了!!
3.2.5 execvpe
int execvpe(const char *file, char *const argv[], char *const envp[]);
execvpe的v可以看做vector,e看做environment,第一个参数就是要执行的文件,第二个就是命令行参数表,第三个也是一个指针数组,是环境变量表,这里的环境变量表会进行覆盖替换父进程的环境变量表,当然也有方法在原始的环境变量表的基础上进行添加!!
补充
putenv 添加环境变量的参数
envrion 访问当前环境的整个环境列表
解决方案 :
- 不使用需要传带env的参数 直接进行putenv
- 使用传env的参数 putenv envrion
相关文章:
Linux——进程终止/等待/替换
前言 本章主要对进程终止,进程等待,进程替换的详细认识,根据实验去理解其中的原理,干货满满! 1.进程终止 概念:进程终止就是释放进程申请的内核数据结构和对应的代码和数据 进程退出的三种状态 代码运行…...
数据结构与算法:图论——最短路径
最短路径 先给出一些leetcode算法题,以后遇见了相关题目再往上增加 最短路径的4个常用算法是Floyd、Bellman-Ford、SPFA、Dijkstra。不同应用场景下,应有选择地使用它们: 图的规模小,用Floyd。若边的权值有负数,需要…...
双指针(5)——有效三角形个数
题目: 这道题我们首先可能会想到暴力解法,三个for循环然后进行check()。时间复杂度肯定是不允许的。 同时,验证可以组成三角形的条件是任意两边之和大于第三边,这就意味着我们每组要进行三次比较。但也有捷…...
Qt QGraphicsScene 的用法
背景,为什么要写这篇博客 今天学习 model - view 模式的时候还看到有 scene - view 模式。不知道还有这个模式,所以学习了下。 学习后总体的感觉是:其实没有也是可以的,但有了方便许多。 从两种画图的方法开始说 以前有个项目也…...
使用 Tesseract 实现藏文OCR
要识别藏文,最常用且有效的方法是使用Tesseract OCR(谷歌开源的OCR工具),因为它拥有针对藏文的预训练模型支持。 🚀 一、安装 Tesseract OCR 软件: 下载链接:Tesseract OCR 下载页面 Windows用…...
数字智慧方案5873丨智慧交通设计方案(57页PPT)(文末有下载方式)
资料解读:智慧交通设计方案 详细资料请看本解读文章的最后内容。 智慧交通设计方案是一份详尽的交通规划文件,旨在通过科学的交通设计方法,优化交通系统,提升交通效率,确保交通安全,并促进可持续发展。该…...
【quantity】6 温度单位实现(temperature.rs)
一源码 以下代码实现了一个温度单位系统,支持开尔文(Kelvin)和摄氏度(Celsius)之间的转换和运算。 /// Temperature (kelvin) / 温度 (开尔文) use super::{Quantity, prefix::*}; use crate::unit::Kelvin; use derive_more::{Add, Sub, AddAssign, SubAssign};/…...
ARConv的复现流程
使用环境 Python 3.10.16 torch 2.1.1cu118 torchvision 0.16.1cu118 其它按照官方提供代码的requirements.txt安装 GitHub - WangXueyang-uestc/ARConv: Official repo for Adaptive Rectangular Convolution 数据准备 从官方主页下载pancollection数据集PanCollection…...
安卓游戏APK文件解密与编辑的完整攻略
在移动游戏开发中,保护游戏数据不被篡改是开发者的重要任务。然而,随着逆向工程技术的发展,破解游戏数据也变得可能。本文将详细介绍如何分析、解密和编辑APK安装包中的加密JSON文件,特别关注assets/task目录下的文件,并提供一种绕过checkfile.json中MD5校验的有效方法。通…...
JVM——JVM 是如何执行方法调用的?
JVM 是如何执行方法调用的? 在 Java 世界的底层运作中,方法调用机制是理解 Java 虚拟机(JVM)行为的关键之一。JVM 作为 Java 程序运行的核心,承担着执行字节码、管理内存、调度线程等多项职责。而方法调用作为程序逻辑…...
一天学完JDBC!!(万字总结)
文章目录 JDBC是什么 1、环境搭建 && 入门案例2、核心API理解①、注册驱动(Driver类)②、Connection③、statement(sql注入)④、PreparedStatement⑤、ResultSet 3、jdbc扩展(ORM、批量操作)①、实体类和ORM②、批量操作 4. 连接池①、常用连接池②、Durid连接池③、Hi…...
【愚公系列】《Manus极简入门》011-习惯养成教练:“习惯塑造师”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
精益数据分析(38/126):SaaS模式的流失率计算优化与定价策略案例
精益数据分析(38/126):SaaS模式的流失率计算优化与定价策略案例 在创业和数据分析的领域中,我们不断探索如何更精准地把握业务发展的关键要素。今天,带着与大家共同进步的想法,深入研读《精益数据分析》&a…...
50.【必备】二分答案法与相关题目
本文的网课内容学习自B站左程云老师的算法详解课程,旨在对其中的知识进行整理和分享~ 网课链接:算法讲解051【必备】二分答案法与相关题目_哔哩哔哩_bilibili 一.爱吃香蕉的珂珂 题目:爱吃香蕉的珂珂 算法原理 整体思路 这是一个二分查找算法…...
C# 方法(局部变量和局部常量)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 局部变量 和第5章介绍的字段…...
MQTT 协议与 HTTP 协议的区别
在现代的网络通信中,MQTT 协议和 HTTP 协议都扮演着重要的角色,但它们有着不同的特点和适用场景。下面我们就从多个方面来详细探讨它们之间的区别。 一.协议设计理念 1. MQTT 协议 MQTT(Message Queuing Telemetry Transport)即…...
博弈论思维——AI与思维模型【90】
一、定义 博弈论思维模型是一种研究在相互影响的决策情境中,参与者如何通过策略选择来实现自身利益最大化的理论框架。它分析参与者之间的相互作用、策略组合以及由此产生的结果,帮助人们理解在竞争或合作环境下的决策逻辑和行为模式。 二、由来 博弈…...
【Bootstrap V4系列】学习入门教程之 表格(Tables)和画像(Figure)
Bootstrap V4系列 学习入门教程之 表格(Tables)和画像(Figure) 表格(Tables)一、Examples二、Table head options 表格头选项三、Striped rows 条纹行四、Bordered table 带边框的表格五、Borderless table…...
第 3 篇:有序的世界:有序表 (TreeMap/TreeSet) 的概念与优势
上一篇我们探讨了哈希表如何以牺牲顺序为代价换取极致的平均速度。然而,在现实世界的许多应用中,数据的有序性不仅是锦上添花,甚至是核心需求。想象一下: 你需要显示一个按价格排序的商品列表。你需要找到某个时间点之前或之后的…...
VulnHub-DC-2靶机
主机发现 sudo arp-scan -l 以sudo管理员权限扫描本地活动ip地址 Interface: eth0, type: EN10MB, MAC: 08:00:27:22:46:4f, IPv4: 192.168.252.230 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.252.6 4c:5f:70:74:3c:3b …...
论文笔记(八十三)STACKGEN: Generating Stable Structures from Silhouettes via Diffusion
STACKGEN: Generating Stable Structures from Silhouettes via Diffusion 文章概括摘要I. INTRODUCTIONII. 相关工作A. 从直觉物理学学习稳定性B. 用于姿态生成的扩散模型C. 自动化顺序装配 III. 方法A. 用于 S E ( 3 ) SE(3) SE(3)积木姿态生成的扩散模型B. 模型架构C. 数据生…...
论文阅读笔记——TesserAct: Learning 4D Embodied World Models
TesserAct 论文 采用RGB-DN(RGB深度法线) 作为 4D 场景中间表示,由此建模 4D 场景,比纯 2D 视频更准确地建模 3D 几何结构。相比现有的 4D 视频生成,优化速度快,收敛好,且首次从当前帧和文本描述…...
变转速振动信号分析处理与故障诊断算法模块
变转速振动信号分析处理与故障诊断算法模块,作为信号处理算法工具箱的主要功能模块,形成了以变转速振动信号分析处理与故障诊断算法模块的经典算法模型,可应用于各类关键机械部件(轴承、齿轮、转子等)的信号分析、故障…...
每日算法-250502
每日算法 - 2025.05.02 记录一下今天刷的几道 LeetCode 算法题。 3191. 使二进制数组全部等于 1 的最少操作次数 I 题目 思路 贪心 解题过程 遍历数组 nums。当我们遇到 nums[i] 时: 如果 nums[i] 是 1,我们不需要进行操作,因为目标是全 …...
如何在纯C中实现类、继承和多态(小白友好版)
基本实现原理 /* 通过结构体函数指针模拟类 */ typedef struct {// 成员变量int x; // 成员方法(函数指针) void (*print)(void* self); } MyClass;/* 成员函数实现 */ void my_print(void* self) {MyClass* obj (MyClass*)self;p…...
AE/PR插件 转场创建大师专业版 Transition Master Pro v2.0.2 Win+使用教程
Transition Master Pro v2.0.2是一款原生转场插件,专为Adobe Premiere Pro和After Effects设计。它提供了创建、导出和销售自己的转场效果,或从一个庞大的转场预设库中选择。使用Transition Master Pro v2.0.2,您可以快速轻松地创建令人惊叹的…...
[Linux]从零开始的STM32MP157 Buildroot根文件系统构建
一、前言 在前面的教程中,教了大家如何移植一个LInux的内核并且正确启动,我们发现Linux内核在启动后会出现一个错误,提示我们没有找到根文件系统。那么什么是根文件系统呢?之前我们使用Ubuntu编译了STM32MP157的TF-A,UBOOT,LINUX内…...
阿里云服务器 篇五(加更):短链服务网站:添加反垃圾邮件功能
文章目录 系列文章(可选)更新YOURLS版本安装 Compliance 插件安装 Phishtank-2.0 插件(可选)安装 httpBL 插件样例网站(不推荐)使用谷歌解决方案更多系列文章 阿里云服务器 篇一:申请和初始化 阿里云服务器 篇二:搭建静态网站 阿里云服务器 篇三:提交搜索引擎收录 阿…...
状压 DP 详解
文章目录 简介做法洛谷 P1171 简介 状压 DP 其实约等于一个 DP 的小技巧,一般应用在处理一个或多个集合的问题中(因为状压 DP 的下标就是一个集合),而且在 n n n 太大的时候建议不要使用这种方法。(如果你不懂&#…...
多模态大模型轻量化探索-视觉大模型SAM(Segment Anything Model)
往期,笔者基于LLava的数据对齐训练,搞了一个Reyes多模态大模型,并且看了些多模态大模型,相关开源的多模态大模型如:KimiVL、Internvl、QwenVL等,其视觉编码器的尺寸都比较大,如:Moon…...
数据分析_问题/优化
1 报表开发 1.1 数据问题 (1) 数据易错 问题描述 ①数据整合困难:数据来源多样、格式差异大,整合时处理不当易丢错数据. ②计算逻辑复杂:开发人员对复杂计算逻辑的理解产生偏差,会导致计算结果不准. 解决方案 ①建立数据标准,统一修正字段命名、数据类型、日期格式等 ②加强…...
我的stm32驱动电机驱动着突然就卡死程序死机了是为什么
电源不稳定或干扰 电机启动电流冲击:电机运行时可能导致电源电压跌落,影响STM32稳定性。需检查电源滤波电容、使用独立电源或增加稳压模块 地线干扰:电机与MCU共地时,高频噪声可能通过地线耦合,需采用隔离电路或磁耦芯…...
使用 Java 实现一个简单且高效的任务调度框架
目录 一、任务调度系统概述 (一)任务调度的目标 (二)任务调度框架的关键组成 二、任务状态设计 (一)任务状态流转设计 (二)任务表设计(SQL) 三、单机任…...
Git 完整教程:初学者分步指南
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! Git 是一个分布式版本控制系统,可以帮助开发人员跟踪代码更改、与他人协作以及高效管理软件项目。无论您是初学者还是正在提升…...
数字智慧方案5856丨智慧环保综合解决方案(50页PPT)(文末有下载方式)
资料解读:智慧环保综合解决方案 详细资料请看本解读文章的最后内容。 随着城市化进程的加速和环境问题的日益严峻,智慧环保成为提升城市环境管理水平的重要手段。本文将对智慧环保综合解决方案进行详细解读,探讨其在实际应用中的需求、解决…...
VBA快速合并多列单元格
实例需求:工作表中第3行到第5行有如下图所示的数据表,为了方便展示,隐藏了部分列,实际数据为从C列到DO列。 现需要合并第3行和第4行相同内容的单元格,如第10行到第12行所示。 示例代码如下。 Sub MergeDemo()Dim dicM…...
区块链+IoT:创新场景落地背后的技术攻坚战
物联网(IoT)与区块链技术作为两大颠覆性技术,正通过深度融合推动各行各业的数字化转型。物联网通过连接海量设备实现数据互通与智能化管理,而区块链凭借去中心化、不可篡改和可追溯的特性,为物联网的安全性、隐私保护和…...
自动化测试项目2 --- 比特纵横 [软件测试实战 Java 篇]
目录 项目介绍 项目源码 库地址 项目功能测试 1. 自动化实施步骤 1.1 编写测试用例 1.2 自动化测试脚本开发 1.2.1 配置相关环境, 添加依赖 1.2.2 代码编写 2. 编写自动化脚本过程问题总结 2.1 Actons 方法的使用 2.2 等待的使用 2.3 页面操作 项目性能测试 1. 进…...
【学习笔记】深入理解Java虚拟机学习笔记——第1章 走进Java
第1章 走进Java 1.1 概述 Java成功的原因 1>一次编写到处运行 2>内存管理安全,自动回收 3>运行时编译 4>强大成熟的第三方库 1.2 Java技术体系 1>Java技术体系组成: -Java语言 -Java虚拟机实现 -class文件格式 -Java类库API -第三方J…...
JavaScript性能优化实战之运行时性能优化
在 JavaScript 开发中,运行时性能优化是确保网页响应迅速和流畅的重要环节。优化运行时性能不仅能提高用户体验,还能在高并发的情况下保证应用的稳定性。本文将细化几个常见的 JavaScript 运行时性能优化策略,帮助你提高代码执行效率。 1️⃣ 避免不必要的内存分配和释放 J…...
走进AI的奇妙世界:探索历史、革命与未来机遇
2022年11月30日,ChatGPT的横空出世像一枚深水炸弹,掀起了全球范围的AI狂潮。但这场革命并非偶然——它背后是80年AI发展史的厚积薄发。从图灵的哲学思辨到深度学习的技术突破,再到生成式AI的“涌现”时刻,AI正以惊人的速度模糊人机…...
用c 编写的笔记搜索程序
{XXX文本记录} 文本记录格式 xxx 搜索词条 #include <stdio.h> #include <string.h> #include <stdlib.h>int main(void){FILE *ffopen("help.txt","r");if(fNULL){perror("file");return -1;}char nr[2000];f…...
鼎讯信通 智能通信干扰设备:多频段多模态信号压制解决方案
在万物互联时代,通信安全已成为现代社会的核心基础设施防护重点。面对日益复杂的电磁环境挑战,新一代智能通信干扰设备通过技术创新实现了信号压制能力的革命性突破。本文将深入解析该设备的八大核心功能与技术特性,展现其在商业通信保障、工…...
软件测试概念
这里写目录标题 需求开发模型软件生命周期瀑布模型螺旋模型增量模型、迭代模型敏捷模型Scrum 测试模型V模型W模型(双V模型) 需求 用户需求:没有经过合理的评估,通常就是一句话 软件需求:是开发人员和测试人员执行工作…...
数据库性能杀手与调优实践
目录 前言一、索引缺失引发的全表扫描灾难1.现象与影响2.优化策略 二、SELECT * 的隐性成本1.危害分析2.优化实践 三、分页查询的性能陷阱1.深度分页问题2.优化方案对比 四、执行计划分析方法论1.关键指标解读2.典型劣化模式识别 五、综合优化最佳实践总结 前言 在数据库应用开…...
初始化列表详解
1.类中包含以下成员,必须放在初始化列表位置进行初始化: 1. 引用成员变量 2.const成员变量 3. 自定义类型成员(且该类没有默认构造函数时 ) 2. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关…...
【CVE-2025-1094】:PostgreSQL 14.15 SQL注入漏洞导致的RCE_ 利用代码和分析
目标 PostgreSQL 14.15BeyondTrust Privileged Remote Access (PRA) 和 Remote Support (RS) 软件受影响的版本:使用PostgreSQL 14.15及其版本的BeyondTrust产品Explain CVE-2025-1094 是 PostgreSQL 14.15 版本的 psql 交互式工具中发现的 SQL 注入漏洞。由于输入值的验证不…...
【验证技能】VIP项目大总结
VIP项目快做一段落了,历时一年半,也该要一个大汇总。 VIP简介 VIP开发流程 VIP难点 进程同步 打拍插入不同bit位宽数据问题。 动态升降lane VIP做的不好的地方和改进想法 各层之间交互 testsuite两端关键 所有层的实现架构不统一 VIP经验 ** 架构…...
MyBatis 参数处理全解析
在 Java 开发领域,MyBatis 作为一款优秀的持久层框架,凭借其简洁的设计和强大的功能,受到了广大开发者的青睐。而参数处理作为 MyBatis 中一个至关重要的环节,掌握好它能让我们更高效地使用 MyBatis 进行数据库操作。本文将全面深…...
【自然语言处理与大模型】使用Xtuner进行QLoRA微调实操
本文首先对Xtuner这一微调框架进行简单的介绍。手把手演示如何使用Xtuner对模型进行微调训练,包括数据准备、训练命令执行及训练过程中的监控技巧。最后,在完成微调之后,本文还将介绍如何对微调结果进行简单对话测试。 一、Xtuner微调框架 X…...