Linux-进程信号
1.快速认识信号
1.1生活角度的信号
你在⽹上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临 时,你该怎么处理快递。也就是你能“识别快递”
当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。 那么在在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的⾏为 并不是⼀定要⽴即执⾏,可以理解成“在合适的时候去取”。
在收到通知,再到你拿到快递期间,是有⼀个时间窗⼝的,在这段时间,你并没有拿到快递,但是 你知道有⼀个快递已经来了。本质上是你“记住了有⼀个快递要去取”
当你时间合适,顺利拿到快递之后,就要开始处理快递了。
⽽处理快递⼀般⽅式有三种:
1.执⾏默 认动作(幸福的打开快递,使⽤商品)
2.执⾏⾃定义动作(快递是零⻝,你要送给你你的⼥朋友)
3.忽略快递(快递拿上来之后,扔掉床头,继续开⼀把游戏)
快递到来的整个过程,对你来讲是异步的,你不能准确断定快递员什么时候给你打电话
基本结论:
你怎么能识别信号呢?识别信号是内置的,进程识别信号,是内核程序员写的内置特性。
信号产⽣之后,你知道怎么处理吗?知道。如果信号没有产⽣,你知道怎么处理信号吗? 知道。所以,信号的处理⽅法,在信号产⽣之前,已经准备好了。
处理信号,⽴即处理吗?我可能正在做优先级更⾼的事情,不会⽴即处理?什么时候?合 适的时候。
信号到来 | 信号保存 | 信号处理
怎么进⾏信号处理啊?a.默认b.忽略c.⾃定义,后续都叫做信号捕捉。
1.2技术应用的角度
1.2.1样例
1.2.2系统函数
1.3信号的概念
信号是进程之间事件异步通知的⼀种⽅式,属于软中断。
1.3.1信号处理
2.产生信号
2.1通过终端按键产生信号
Ctrl+C(SIGINT)已经验证过,这⾥不再重复
Ctrl+\(SIGQUIT)可以发送终⽌信号并⽣成core dump⽂件,⽤于事后调试(后⾯详谈)
Ctrl+Z(SIGTSTP)可以发送停⽌信号,将当前前台进程挂起到后台等。
2.2调用系统命令向进程发信号
2.3使用函数产生信号
kill 命令是调⽤ kill 函数实现的。 kill 函数可以给⼀个指定的进程发送指定的信号。
raise 函数可以给当前进程发送指定的信号(⾃⼰给⾃⼰发信号)。
abort 函数使当前进程接收到信号⽽异常终⽌。
2.4由软条件产生信号
SIGPIPE 是⼀种由软件条件产⽣的信号,在“管道”中已经介绍过了。
本节主要介绍 alarm 函数 和 SIGALRM 信号。
调⽤ alarm 函数可以设定⼀个闹钟,也就是告诉内核在 seconds 秒之后给当前进程发 SIGALRM 信号,该信号的默认处理动作是终⽌当前进程。
这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。打个⽐⽅,某⼈要⼩睡⼀觉,设定闹 钟为30分钟之后响,20分钟后被⼈吵醒了,还想多睡⼀会⼉,于是重新设定闹钟为15分钟之后响,“以 前设定的闹钟时间还余下的时间”就是10分钟。如果seconds值为0,表⽰取消以前设定的闹钟,函数 的返回值仍然是以前设定的闹钟时间还余下的秒数。
如何理解软件条件
在操作系统中,信号的软件条件指的是由软件内部状态或特定软件操作触发的信号产⽣机制。这些条 件包括但不限于定时器超时(如alarm函数设定的时间到达)、软件异常(如向已关闭的管道写数据 产⽣的SIGPIPE信号)等。当这些软件条件满⾜时,操作系统会向相关进程发送相应的信号,以通知 进程进⾏相应的处理。简⽽⾔之,软件条件是因操作系统内部或外部软件操作⽽触发的信号产⽣。
2.5硬件异常产生信号
硬件异常被硬件以某种⽅式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。
例如当前 进程执⾏了除以0的指令,CPU的运算单元会产⽣异常,内核将这个异常解释为SIGFPE信号发送给进 程。再⽐如当前进程访问了⾮法内存地址,MMU会产⽣异常,内核将这个异常解释为SIGSEGV信号发送 给进程。
我们在C/C++当中除零,内存越界等异常,在系统层⾯上,是被当成信号处理的。
⼦进程退出core dump
3.保存信号
3.1信号相关概念
实际执⾏信号的处理动作称为信号递达(Delivery)
信号从产⽣到递达之间的状态,称为信号未决(Pending)。
进程可以选择阻塞(Block)某个信号。
被阻塞的信号产⽣时将保持在未决状态,直到进程解除对此信号的阻塞,才执⾏递达的动作.
注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,⽽忽略是在递达之后可选的⼀种处理动 作。
3.2在内核中表示
3.3sigset_t
从上图来看,每个信号只有⼀个bit的未决标志,⾮0即1,不记录该信号产⽣了多少次,阻塞标志也是这样 表⽰的。因此,未决和阻塞标志可以⽤相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型 可以表⽰每个信号的“有效”或“⽆效”状态,在阻塞信号集中“有效”和“⽆效”的含义是该信号 是否被阻塞,⽽在未决信号集中“有效”和“⽆效”的含义是该信号是否处于未决状态。下⼀节将详 细介绍信号集的各种操作。阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask), 这⾥的“屏蔽” 应该理解为阻塞⽽不是忽略。
4.捕捉信号
4.1流程
如果信号的处理动作是⽤⼾⾃定义函数,在信号递达时就调⽤这个函数,这称为捕捉信号。
由于信号处理函数的代码是在⽤⼾空间的,处理过程⽐较复杂,举例如下:
• ⽤⼾程序注册了 SIGQUIT 信号的处理函数 sighandler 。
• 当前正在执⾏ main 函数,这时发⽣中断或异常切换到内核态。
• 在中断处理完毕后要返回⽤⼾态的 main 函数之前检查到有信号 SIGQUIT 递达。
• 内核决定返回⽤⼾态后不是恢复 main 函数的上下⽂继续执⾏,⽽是执⾏ sighandler 函 数, sighandler 和 main 函数使⽤不同的堆栈空间,它们之间不存在调⽤和被调⽤的关系,是两个 独⽴的控制流程。
• sighandler 函数返回后⾃动执⾏特殊的系统调⽤ sigreturn 再次进⼊内核态。
• 如果没有新的信号要递达,这次再返回⽤⼾态就是恢复 main 函数的上下⽂继续执⾏了。
4.2signaction
当某个信号的处理函数被调⽤时,内核⾃动将当前信号加⼊进程的信号屏蔽字,当信号处理函数返回时⾃ 动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产⽣,那么它会被阻塞到 当前处理结束为⽌。
如果在调⽤信号处理函数时,除了当前信号被⾃动屏蔽之外,还希望⾃动屏蔽另外⼀ 些信号,则⽤sa_mask字段说明这些需要额外屏蔽的信号,当信号处理函数返回时⾃动恢复原来的信号屏蔽字。sa_flags字段包含⼀些选项,本章的代码都把sa_flags设为0,sa_sigaction是实时信号的处理函 数,本章不详细解释这两个字段,有兴趣的同学可以在了解⼀下。
4.3操作系统的运行
4.3.1硬件中断
• 中断向量表就是操作系统的⼀部分,启动就加载到内存中了
• 通过外部硬件中断,操作系统就不需要对外设进⾏任何周期性的检测或者轮询
• 由外部设备触发的,中断系统运⾏流程,叫做硬件中断
4.3.2时钟中断
问题:
• 进程可以在操作系统的指挥下,被调度,被执⾏,那么操作系统⾃⼰被谁指挥,被谁推动执⾏呢?
• 外部设备可以触发硬件中断,但是这个是需要⽤⼾或者设备⾃⼰触发,有没有⾃⼰可以定期触发的 设备?
• 这样,操作系统不就在硬件的推动下,⾃动调度了么!!!
4.3.3死循环
如果是这样,操作系统不就可以躺平了吗?对,操作系统⾃⼰不做任何事情,需要什么功能,就向中 断向量表⾥⾯添加⽅法即可.操作系统的本质:就是⼀个死循环!
这样,操作系统,就可以在硬件时钟的推动下,⾃动调度了.
4.3.4软中断
• 上述外部硬件中断,需要硬件设备触发。
• 有没有可能,因为软件原因,也触发上⾯的逻辑?有!
• 为了让操作系统⽀持进⾏系统调⽤,CPU也设计了对应的汇编指令(int或者syscall),可以让CPU内 部触发中断逻辑。
问题:
• ⽤⼾层怎么把系统调⽤号给操作系统?-寄存器(⽐如EAX)
• 操作系统怎么把返回值给⽤⼾?-寄存器或者⽤⼾传⼊的缓冲区地址
• 系统调⽤的过程,其实就是先int 0x80、syscall陷⼊内核,本质就是触发软中断,CPU就会⾃动执 ⾏系统调⽤的处理⽅法,⽽这个⽅法会根据系统调⽤号,⾃动查表,执⾏对应的⽅法
• 系统调⽤号的本质:数组下标!
• 可是为什么我们⽤的系统调⽤,从来没有⻅过什么 int 0x80 或者 syscall 呢?都是直接调⽤ 上层的函数的啊?
• 那是因为Linux的gnuC标准库,给我们把⼏乎所有的系统调⽤全部封装了。
缺⻚中断?内存碎⽚处理?除零野指针错误?这些问题,全部都会被转换成为CPU内部的软中断, 然后⾛中断处理例程,完成所有处理。有的是进⾏申请内存,填充⻚表,进⾏映射的。有的是⽤来 处理内存碎⽚的,有的是⽤来给⽬标进⾏发送信号,杀掉进程等等。
• 操作系统就是躺在中断处理例程上的代码块!
• CPU内部的软中断,⽐如int 0x80或者syscall,我们叫做陷阱
• CPU内部的软中断,⽐如除零/野指针等,我们叫做异常。
(所以,能理解“缺⻚异常” 为什么这么叫了吗?)
4.4如何理解内核态和用户态
结论:
• 操作系统⽆论怎么切换进程,都能找到同⼀个操作系统!换句话说操作系统系统调⽤⽅法的执⾏, 是在进程的地址空间中执⾏的!
• 关于特权级别,涉及到段,段描述符,段选择⼦,DPL,CPL,RPL等概念,⽽现在芯⽚为了保证 兼容性,已经⾮常复杂了,进⽽导致OS也必须得照顾它的复杂性,这块我们不做深究了。
• ⽤⼾态就是执⾏⽤⼾[0,3]GB时所处的状态
• 内核态就是执⾏内核[3,4]GB时所处的状态
• 区分就是按照CPU内的CPL决定,CPL的全称是CurrentPrivilegeLevel,即当前特权级别。
• ⼀般执⾏ int 0x80 或者 syscall 软中断,CPL会在校验之后⾃动变更(怎么校验看学⽣反映)
5.可重入函数
• main函数调⽤insert函数向⼀个链表head中插⼊节点node1,插⼊操作分为两步,刚做完第⼀步的 时候,因为硬件中断使进程切换到内核,再次回⽤⼾态之前检查到有信号待处理,于是切换到 sighandler函数,sighandler也调⽤insert函数向同⼀个链表head中插⼊节点node2,插⼊操作的两步都做完之后从sighandler返回内核态,再次回到⽤⼾态就从main函数调⽤的insert函数中继续往下执⾏,先前做第⼀步之后被打断,现在继续做完第⼆步。结果是,main函数和sighandler先后向 链表中插⼊两个节点,⽽最后只有⼀个节点真正插⼊链表中了。
• 像上例这样,insert函数被不同的控制流程调⽤,有可能在第⼀次调⽤还没返回时就再次进⼊该函 数,这称为重⼊,insert函数访问⼀个全局链表,有可能因为重⼊⽽造成错乱,像这样的函数称为不可 重⼊函数,反之,如果⼀个函数只访问⾃⼰的局部变量或参数,则称为可重⼊(Reentrant)函数。想⼀ 下,为什么两个不同的控制流程调⽤同⼀个函数,访问它的同⼀个局部变量或参数就不会造成错乱?
如果⼀个函数符合以下条件之⼀则是不可重⼊的:
• 调⽤了malloc或free,因为malloc也是⽤全局链表来管理堆的。
• 调⽤了标准I/O库函数。标准I/O库的很多实现都以不可重⼊的⽅式使⽤全局数据结构。
volatile作⽤:保持内存的可⻅性,告知编译器,被该关键字修饰的变量,不允许被优化,对该 变量的任何操作,都必须在真实的内存中进⾏操作
6.SIGCHLD信号
进程⼀章讲过⽤wait和waitpid函数清理僵⼫进程,⽗进程可以阻塞等待⼦进程结束,也可以⾮阻塞地查 询是否有⼦进程结束等待清理(也就是轮询的⽅式)。采⽤第⼀种⽅式,⽗进程阻塞了就不能处理⾃⼰的 ⼯作了;采⽤第⼆种⽅式,⽗进程在处理⾃⼰的⼯作的同时还要记得时不时地轮询⼀下,程序实现复杂。
其实,⼦进程在终⽌时会给⽗进程发SIGCHLD信号,该信号的默认处理动作是忽略,⽗进程可以⾃定义 SIGCHLD信号的处理函数,这样⽗进程只需专⼼处理⾃⼰的⼯作,不必关⼼⼦进程了,⼦进程终⽌时会通 知⽗进程,⽗进程在信号处理函数中调⽤wait清理⼦进程即可。
请编写⼀个程序完成以下功能:⽗进程fork出⼦进程,⼦进程调⽤exit(2)终⽌,⽗进程⾃定义SIGCHLD信 号的处理函数,在其中调⽤wait获得⼦进程的退出状态并打印。
事实上,由于UNIX的历史原因,要想不产⽣僵⼫进程还有另外⼀种办法:⽗进程调⽤sigaction将 SIGCHLD的处理动作置为SIG_IGN,这样fork出来的⼦进程在终⽌时会⾃动清理掉,不会产⽣僵⼫进程,也不会通知⽗进程。系统默认的忽略动作和⽤⼾⽤sigaction函数⾃定义的忽略通常是没有区别的,但这 是⼀个特例。此⽅法对于Linux可⽤,但不保证在其它UNIX系统上都可⽤。请编写程序验证这样做不会 产⽣僵⼫进程。
7.用户态和内核态
CPU中有⼀个标志字段,标志着线程的运 ⾏状态,⽤⼾态为3,内核态为0。
低权限的资源范围较⼩,⾼权限的资源范围更⼤,所以⽤⼾态与内核态的概念就是CPU指令集权限的 区别。
• ⽤⼾态:只能操作0-3G 范围的低位虚拟空间地址
• 内核态: 0-4G 范围的虚拟空间地址都可以操作,尤其是对3-4G 范围的⾼位虚拟空间地址必 须由内核态去操作
◦ 3G-4G 部分⼤家是共享的(指所有进程的内核态逻辑地址是共享同⼀块内存地址),是内 核态的地址空间,这⾥存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。
◦ 在内核运⾏的过程中,会涉及内核栈的分配,内核的进程管理的代码会将内核栈创建在内核 空间中,当然相应的⻚表也会被创建。
⽤⼾态与内核态的切换
什么情况会导致⽤⼾态到内核态切换??
切换时CPU需要做什么??
切换流程
从上述流程可以看出⽤⼾态切换到内核态的时候,会牵扯到⽤⼾态现场信息的保存以及恢复,还要进 ⾏⼀系列的安全检查,还是⽐较耗费资源的。
相关文章:
Linux-进程信号
1.快速认识信号 1.1生活角度的信号 你在⽹上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临 时,你该怎么处理快递。也就是你能“识别快递” 当快递员到了你楼下,你也收到快递到来的通知&#…...
Trae生成 django5.2.1后台管理
安装django,采用的是5.2.1版本: pip install django Trae对话框中输入: 基于django框架,生成版本管理功能,版本管理模块命名为versions,工程项目命名为main 迁移数据库: python manage.py …...
Interrupt 2025 大会回顾:关于LangChain 的 AI Agent会议内容总结
Interrupt 2025 大会已圆满落下帷幕!今年,来自全球各地的 800 多位人士齐聚旧金山,参加了 LangChain 首次举办的行业盛会,共同聆听各团队分享构建 AI Agent 的经验故事——会议的精彩和余温至今仍令人振奋! 思科、优步…...
C#学习9——接口、抽象类
一、接口 1.什么是接口 官方话:是一种定义契约(一组方法、属性、事件或索引器的抽象声明)的机制,它规定了实现该接口的类或结构必须提供这些成员的具体实现。接口是面向对象编程中实现多态和抽象的重要工具。 个人理解…...
【高德开放平台-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
Xshell实战:远程连接VMware CentOS7虚拟机与高效运维指南——从零配置到自动化操作,解锁Xshell的核心价值
一、实战背景与目标 在开发与运维工作中,常需通过本地Windows主机远程管理虚拟机中的Linux系统。Xshell作为专业终端工具,能快速建立安全连接,执行高效操作。 场景需求: 在Windows系统中,通过Xshell远程连接VMware中的…...
C#编写软件添加菜单栏
将MenuStrip控件拖动到窗体,可以直接在工具箱搜索menu,我是先在窗体上上加了一个panel,把MenuStrip拖动到panel上面,点击即可输入自己需要的文本。...
【C++】map和multimap的常用接口详解
map和multimap的文档:<map> - C Reference 1.map类的介绍 map 有两个模板参数,是 key/value的场景。 这里的Key就是key,T就是value,命名不同而已。map默认要求Key⽀持⼩于⽐较(升序),如…...
线程池模式与C#中用法
一、线程池模式解析 1. 核心概念 线程池是一种 管理线程生命周期的技术,主要解决以下问题: 减少线程创建/销毁开销:复用已存在的线程 控制并发度:避免无限制创建线程导致资源耗尽 任务队列:有序处理异步请求 2. …...
47、C#可否对内存进⾏直接的操作?
是的,C# 可以通过几种方式对内存进行直接操作,尽管它主要是一门托管语言,内存管理通常由.NET运行时自动处理。 主要方法 1.unsafe 代码和指针 使用 unsafe 关键字可以启用指针操作需要项目启用"允许不安全代码"选项示例…...
精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍 在创业过程中,最小可行化产品(MVP)的迭代优化是从验证假设到实现产品市场契合的关键环节。今天,我们结合《精益数据分析》中的方法论…...
大数据与数据库服务器参数调优方法
1 硬件配置优化 存储与磁盘 优先选择 SSD固态硬盘替代机械硬盘,显著降低I/O延迟,提升随机读写性能。 采用 RAID 10阵列实现高性能与冗余的平衡,适用于高并发数据库场景。 大数据场景中,通过多磁盘并行挂载(如HDFS)提升吞吐量,规避单盘性能瓶颈。 I/…...
【Fifty Project - D28】
今日完成记录 TimePlan完成情况9:30 - 11:30Leetcode√14:00 - 15:30练胸√15:30 - 16:30Leetcode√19:40 - 21:20有氧√ Leetcode 今天是周赛复盘篇,昨天的周赛太刺激…...
Image and depth from a conventional camera with a coded aperture论文阅读
Image and depth from a conventional camera with a coded aperture 1. 研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 创新方法:编码光圈设计与统计模型2.1 核心思路2.2 关键公式与模型架构2.2.1 图像形成模型2.2.2 深度可区分性准则2.2.3 统计模型与优化框架2.2…...
vue3 vite 项目中自动导入图片
vue3 vite 项目中自动导入图片 安装插件配置插件使用方法 安装插件 yarn add vite-plugin-vue-images -D 或者 npm install vite-plugin-vue-images -D配置插件 在 vite.config.js 文件中配置插件 // 引入 import ViteImages from vite-plugin-vue-images;plugins: [vue(),/…...
软考-软件工程开发模型
软考-软件工程开发模型 参考视频: 软件工程概述&开发模型 ,配合视频理解更清晰~ 软件的生命周期为:需求分析、软件设计、软件开发、运行维护直至被淘汰 几个阶段。 软件工程支持 4 个活动,简称 PDCA,…...
纸上流年:Linux基础IO的文件理解与操作
文章目录 前言:数字世界的窗口🌇序章🏙️正文一、文件理解二、C语言文件操作2.1、文件打开2.2、文件关闭2.3、文件写入2.4、文件读取 三、系统级文件操作3.1、打开 open3.1.1、函数理解 3.2、关闭 close3.3、写入 write3.4、读取 read 四、小…...
基础深度补全模型DepthLab: From Partial to Complete
许多任务本身就包含部分深度信息,例如:(1)三维高斯图像修复;(2)激光雷达深度补全;(3)利用 Dust3R 进行稀疏视角重建;以及(4࿰…...
15 秒写一首歌?AI 音乐生成模型 ACE-Step 上手体验!
在人工智能技术持续突破的浪潮中,音乐创作领域迎来了革命性的变革。近日,阶跃星辰与ACE Studio联合发布的开源音乐大模型ACE-Step(中文名:音跃)正式亮相,标志着AI音乐创作技术迈入全新阶段。这款集成了最新…...
如何在数据库中正确存储金额?
无论是开发电商平台、财务系统还是支付应用,金额的存储都是核心需求。但许多新手开发者常因字段类型选择不当,导致金额计算错误甚至资金损失。本文将用最通俗的语言,详细讲解如何专业地设计数据库中的金额字段。 一、为什么不能随便选字段类型…...
网络请求和状态管理
安装axios 创建项目,输入名称 新建文件夹: 在文件夹下输入cmd 运行 最后在复制到浏览器中 得到页面 使用axios axios封装成模块 实现一个学生信息案例 模拟数据,请求数据 安装完成后新建一个mock文件夹,制作一个模拟数据 配置…...
TIF导入TWF坐标方法
TIF坐标导入 1、打开Arcmap,将影像拖入界面,点击确定 2、点击工具箱→投影变换→定义投影 国家2000,WGS84坐标系 点击确定 显示已完成,即可 3、批处理 将需要定义的tif拖入到ARCMAP中,点击定义投影,右键…...
系统思考:动态性复杂
我们是否有遇到过这样的困境?做决策时,总觉得问题很简单,但总是看不清楚全貌。越做越复杂,最后好像什么都没解决,反而把事情弄得更糟。 其实,这就是动态性复杂的表现。它包含了两个关键因素:细节…...
智能体应用如何重塑未来生活?全面解析技术场景与实在Agent突破
智能体应用有哪些?在科技飞速发展的当下,人工智能正以前所未有的速度渗透到我们生活的方方面面。而智能体技术,作为人工智能领域的一颗璀璨新星,正逐渐展现出其重塑未来生活的巨大潜力。从办公效率的提升到医疗服务的优化…...
20.自动化测试框架开发之Excel配置文件的IO开发
20.自动化测试框架开发之Excel配置文件的IO开发 一、核心架构解析 1.1 类继承体系 class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑1.2 版本依赖说明 # 必须安装1.2.0版本(支持xlsx格式&#…...
1.1 Epson机器人常用指令1-Print函数、RobotInfo$
本文介绍Print, RobotInfo的使用. 主要总结如下: 1. Print可以向串口、网口、手操器TP1,RC软件等发送数据 2. RobotInfo$(4)可以得到机器人序列号。用于防止程序下载到其他机器人上。 3. CX, CY, CZ可以返回点的XYZ坐标值。 Rea…...
【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025
3D-Mem 是用于具体探索和推理的3D场景记忆,来自CVPR 2025. 使用信息丰富的多视角图像,来表示场景并捕捉已探索区域的丰富视觉信息, 整合了基于前沿的探索,使智能体能够通过考虑已知和潜在的新信息,做出明智的决策。 …...
视觉-语言导航:综述与类别
22年4月来自国防科大的论文“Vision-Language Navigation: A Survey and Taxonomy”。 视觉-语言导航 (VLN) 任务要求智体遵循人类语言指令,在未曾见过的环境中导航。这个充满挑战的领域涉及自然语言处理、计算机视觉、机器人技术等领域,并催生了众多专…...
基于SpringBoot的家政预约系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
什么是子网委派?
Azure 子网委派的概念 子网委托使您能够为所选的 Azure PaaS 服务指定一个特定的子网,并将其注入到您的虚拟网络中。子网委托为客户提供了完全的控制权,可以管理 Azure 服务与其虚拟网络的集成。 当您将子网委托给 Azure 服务时,您允许该服务为该子网建立一些基本的网络配…...
5个yyds的.Net商城开源项目
今天一起来盘点下5个商城开源项目。 1、支持多语言、多商店的商城,.Net7 EF7领域驱动设计架构(Smartstore) 项目简介 Smartstore 支持桌面和移动平台、多语言、多商店、多货币的商城,并支持SEO优化,支持无限数量的…...
如何快速隔离被攻击的服务器以防止横向渗透
网络延迟过高会显著影响用户体验和服务性能,以下是系统化的排查思路和解决方案: --- ### **1. 快速定位问题范围** #### **基础检查** - **测试延迟目标**: bash ping <目标IP或域名> # 检查基础延迟(ICMP…...
【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。
一、问题描述 后端项目部署在服务器上,通过域名访问接口服务器报错500,通过浏览器访问殒命的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的,感觉是域名出现了问题 二、解决过程 先说结论:问题原因是…...
Kubernetes MCP服务器(K8s MCP):如何使用?
#作者:曹付江 文章目录 1、什么是 Kubernetes MCP 服务器?1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. (可选)Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…...
RHCE 练习三:架设一台 NFS 服务器
一、题目要求 1、开放 /nfs/shared 目录,供所有用户查询资料 2、开放 /nfs/upload 目录,为 192.168.xxx.0/24 网段主机可以上传目录,并将所有用户及所属的组映射为 nfs-upload,其 UID 和 GID 均为 210 3.将 /home/tom 目录仅共享给 192.16…...
SpringBoot(二)--- SpringBoot基础(http协议、分层解耦)
目录 前言 一、SpringBoot入门 1.入门程序 2.解析 二、HTTP协议 1.HTTP概述 2.HTTP请求协议 2.1 GET方式的请求协议 2.2 POST方式的请求协议 2.3 两者的区别 2.4 获取请求数据 3.HTTP响应协议 三、分层解耦 1.三层架构 2.IOC&DI 2.1 入门 2.2 IOC详解 2.…...
mongodb部署Shard Cluster
一、创建集群认证文件 mkdir ./data ./confopenssl rand -base64 756 > ./conf/keyfilechmod 400 ./conf/keyfiledocker network create mongo-cluster二、部署configsever副本集 #!/bin/bash inamemongodb:8.0.9 conf_namemongo_conf_ replset_nameconfrsecho "…...
【大数据】MapReduce 编程--索引倒排--根据“内容 ➜ 出现在哪些文件里(某个单词出现在了哪些文件中,以及在每个文件中出现了多少次)
将 Hadoop 所需的 JAR 文件添加到项目中,确保可以使用 Hadoop 的 API JAR (Java Archive) 文件是一种用于打包多个 Java 类文件、资源文件(如图片、配置文件等)以及元数据的压缩文件格式。它类似于 ZIP 文件,但 JAR 文件通常用于 …...
使用PHP对接东南亚、日本、印度和印度尼西亚股票数据源
本文将介绍如何通过StockTV提供的API接口,使用PHP语言来获取并处理东南亚(包括马来西亚、新加坡等)、日本、印度以及印度尼西亚的股票市场数据。我们将以获取市场列表、查询公司信息、查看涨跌排行榜为例,展示具体的操作流程。 准…...
从基础到高级:网站反爬技术全景解析与第三方工具对比
网站反爬与用户行为检测实战指南:从基础防护到智能识别 在当今数据驱动的互联网时代,网站面临着日益复杂的爬虫攻击和恶意行为威胁。本文将系统性地介绍网站反爬与用户行为检测的技术体系,包括基本原理、防护策略、第三方组件选型以及真实案例分析,帮助开发者构建更加安全…...
docker安装Prometheus+Grafana
docker 安装Prometheus 下载镜像 很多镜像服务器都不行了,我用的这个地址还可以 查看可用docker镜像地址:https://cloud.tencent.com/developer/article/2485043 docker pull docker.xuanyuan.me/prom/prometheus:latest启动 docker run -itd --name…...
解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误
一、问题重现 最近在部署一个 Bash 脚本时遇到一个诡异的问题: bash $ chmod x deploy.sh $ ./deploy.sh /usr/bin/env: ‘bash\r’: No such file or directory 明明脚本内容正确,权限也设置好了,为什么会出现这样的错误? 二…...
DS1302实时时钟模块
目录 0.单片机定时器时钟的几个缺点: 1.DS1302介绍 2.引脚定义和应用电路 3.原理图 4.内部结果框图,RAM(寄存器) 5.寄存器定义 6.时序定义 7.DS1302时钟代码 第一步: 第二步: 第三步:…...
redis的List为什么用ziplist和quicklist
redis的List为什么用ziplist和quicklist 压缩列表(ziplist) 是一种节省内存的数据结构,最早是 Redis 中为了减少内存开销而引入的一种顺序存储结构。它不是标准库里的内容,而是某些底层系统(比如 Redis)在…...
Java 后端基础 Maven
Maven 1.什么是Maven 2.Maven的作用 Maven核心 Maven概述 IDEA集成Maven 1.创建Maven项目 点击设置里的 Project Structure 将jdk和编译语言进行设置 随后点击apply点击ok 2.Maven坐标 3.导入Maven项目 将文件夹复制到当前项目的目录下 在这个目录下,在磁盘中…...
开源情报的发展前景与行业运用
开源情报系统在实际中的应用正随着技术进步和社会需求的增长而不断拓展,其在国家安全、军事、经济、公共卫生等多个领域展现出显著价值。以下是结合最新动态与案例的综合分析: 一、国家安全:从传统到现代的情报体系升级 开源情报在国家安全…...
《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 文章目录 Node.js与Webpack-01.Node.js入门定义和作用什么是前端工程化?(离不开node.js)Node.…...
Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
一、前序 近两年AI发展太过迅速,各类AI产品层出不穷,AI绘图/AI工作流/AI视频等平台的蓬勃发展,促使图片/视频等复杂内容的创作更加简单,让更多普通人有了图片和视频创作的机会。另一方面用户内容消费也逐渐向图片和视频倾斜。在“…...
disryptor和rabbitmq
disryptor和rabbitmq Disruptor 是什么? Disruptor 是一个由 LMAX Exchange 开发的高性能、低延迟的进程内(in-process)并发编程框架/库。它最初是为了解决金融交易系统中高吞吐量、低延迟消息传递的需求而设计的。 核心特点和设计理念&am…...
java基础-关键字:static、单例模式
1.例如:我们创造一个人的类,我们希望他是中国人类,所以我们希望所有对象都共有中国人的属性; import org.w3c.dom.ls.LSOutput;import java.sql.Connection; import java.sql.SQLOutput; import java.util.Arrays;public class Ma…...