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

【Linux信号】Linux进程信号(上):信号产生方式和闹钟

个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ 理解信号是什么为什么要有生活中的信号1.1 信号是什么1.1.1 普通信号和实时信号1.1.2 信号的本质1.2 生活中有哪些信号以及一些结论总结1.2.1 man 7 signal查看信号部分的内容1.2.2 信号没有产生也知道怎么处理1.2.3 收到一个信号会立即处理它吗1.2.4 信号怎么处理1.2.5 总结一些这些小结论1.2.6 图示1.3 信号具体化1.3.1 为什么是大写这些大写的名字是什么1.3.2 头文件含内核查看1.3.3 保存信号1.3.3.1 进程一定要有临时保存信号的能力1.3.3.2 我们可以用什么样的特定的数据类型来保存信号位图1.3.4 信号的位图在进程PCB里面谁有资格修改内核数据结构中的字段1.4 为什么要有信号1.5 信号是什么的思维导图1.6 如何自定义捕捉信号2 ~ 信号的产生2.1 信号产生的方式2.1.1 使用系统命令产生kill命令2.1.2 通过键盘产生信号2.1.3 产生信号的还有一种方式系统调用2.1.4 第四种产生信号的方式异常2.1.5 第五种信号产生的方式由软件条件产生信号2.2 三个系统调用层层递进2.2.1 三个系统调用层层递进2.2.2 OS先收到键盘输入再由操作系统转换成信号发送给目标进程2.3 键盘怎么能够目标进程发送信号呢2.3.1 如何理解键盘输入2.3.2 OS如何解释快捷键2.3.3 OS怎么知道信号应该发送给哪一个进程呢2.3.3.1 进程组2.3.3.2 会话IDSID2.3.3.3 前台进程和后台进程 前后台进程切换2.3.3.3.1 前台进程2.3.3.3.2 后台进程2.3.3.3.3 作业控制命令1 jobs2 fgforeground3 bgbackground4 CtrlZ5 CtrlC2.3.3.4 一些结论结论1Ctrl C只能用于终止前台进程作业 / 独立的进程组有什么关系会话与进程组作业的作业之间的关系在一个会话中任何时刻只允许一个进程组在前台后台不允许获取2.4 alarm设置一个若干秒之后的闹钟2.4.1 闹钟的返回值问题2.4.2 闹钟的应用场景2.4.3 理解闹钟结尾1 ~ 理解信号是什么为什么要有生活中的信号1.1 信号是什么1.1.1 普通信号和实时信号用kill -l可以查看常用的只有1~3134~64没有0号——一共62个不是64个哦前31个是普通信号后面带RTreal-time实时信号。我们只考虑1-31就好了。1.1.2 信号的本质什么是通知什么是异步通知这个通知需要我们理解一下——事件通知。异步通知的到来跟我不同步。举个例子我点了个外卖然后就打游戏外卖小哥送货上门敲门是一个通知说明外卖到了我和外卖小哥是不同步的。异步关系就是没关系你做你的我做我的同步关系就是有关系我得等你做完再做。再比如比如我是一个老师我讲课突然快递电话打过来了我叫张三去帮我取快递但是我等张三找完快递回来再继续讲这就是个同步的关系张三不回来我就不往下讲。如果我继续讲课张三也在找快递我讲课、他帮我办事这个就是个异步的关系——我讲我的课张三找他要帮我找的快递。1.2 生活中有哪些信号以及一些结论总结大抵有如下这些上面这些所有的信号产生的几乎都是异步的。人能够识别对应的、甚至还没有发生的这些信号为什么能够识别这些信号人是经过教育的早就知道信号对应处理动作的对应关系。操作系统给目标进程发送信号目标进程能不能识别呢答案是进程天然能够识别——进程和信号都是程序员写的代码进程相当于我们人已经被程序员教育过了程序员设计好了进程能够识别信号并且已经知道怎么处理信号了。1.2.1 man 7 signal查看信号部分的内容man 7本身不是查看信号的指令而是指定要查看的手册章节为第 7 章。在 Linux 系统中信号相关的概述通常位于第 7 章因此要查看信号的详细信息可以使用命令man7signal会显示信号的概念、列表、默认行为等全局说明。此外信号相关的系统调用如 signal()、sigaction()一般在第 2 章库函数如 sigsetops()可能在第 3 章而第 7 章主要提供更上层的概述和标准约定。1.2.2 信号没有产生也知道怎么处理1.2.3 收到一个信号会立即处理它吗当我们收到一个信号准备处理这个信号这里的我们即进程会立即处理这个信号吗有时候中断不了呢处理不了信号。对于信号的处理——不会立即处理——信号可能会立即处理只有合适的时候会处理。既然有一定概率不会立即处理那么得要有把信号临时保存起来的能力——不会立即处理就得有临时保存的能力。比如外卖小哥打电话答应去取外卖之后如果没有保存信号是不是就打游戏打着打着就忘了取外卖了。1.2.4 信号怎么处理默认我后面打完游戏去拿外卖回来吃忽略我直接就不想拿了(但是并不是忘了只是不想)自定义比如我拿完外卖直接丢了或者干别的事自定义行为我们就以红绿信号灯为例红灯——自动停了——默认信号。收到信号也处理了但是处理的方式是忽略——忽略信号。红灯亮了别人要么忽略要么停下而你在跳舞——自定义信号。1.2.5 总结一些这些小结论设别信号是内置的进程能自己识别信号是内核程序员写的内置特性。信号的处理方法在信号产生之前就已经准备好了。处理信号不是立即处理的因为我可能正在做优先级更高的事情会选择合适的时候进行处理。比如我在打游戏外卖员给我打电话叫拿外卖那我肯定是先忙完手头的事再去拿。信号不会被立即处理所以就注定了进程要有临时保存信号的能力信号处理的动作有三种默认、忽略、自定义后续都叫信号捕捉。1.2.6 图示1.3 信号具体化1.3.1 为什么是大写这些大写的名字是什么没有0号信号我们知道信号是有编号的。这些大写的名字是什么呢这些大写的名字就是宏。1.3.2 头文件含内核查看我们查看内核——1~31是普通信号我们现在是分时操作系统34~64是实时信号有RT就是real-time。1.3.3 保存信号1.3.3.1 进程一定要有临时保存信号的能力进程一定要有临时保存信号的能力——原因我们前面已经分析了。信号就是个数字吗还不够具体。进程需要使用特定的数据类型来保存对应的信号我们要分析两个问题——1、我们要保存什么信号哪一个信号2、我们要保存信号的侧重点哪一个信号是否产生了1.3.3.2 我们可以用什么样的特定的数据类型来保存信号位图1、比特位的位置表示信号编号2、比特位的内容要么是1要么是01或者0——是否收到对应的信号用位图表示对应的1~31个编号。关键是这个位图在哪里这个位图应该在哪里设计在进程的PCB里面。1.3.4 信号的位图在进程PCB里面谁有资格修改内核数据结构中的字段信号的位图在进程PCB里面谁有资格修改内核数据结构中的字段谁有资格——这个世界上能够给进程写入信号的家伙只有一个——就是操作系统OS。操作系统不能决定全部的往进程写入信号有能力但是也只是一个办事的——用户让你办的用户通过系统调用让操作系统向目标进程发送信号。1.4 为什么要有信号我们一看到问为什么一定要想到没有这个东西会出现怎么样的问题。Linux之所以需要信号是为了提供一种异步且轻量级的进程间通信与事件通知机制使操作系统能够立即打断进程的正常执行流以通知其发生了诸如用户中断CtrlC、硬件异常段错误、定时器到期或子进程退出等突发状况。信号机制弥补了管道或共享内存等同步通信方式的不足让进程能够以一种统一、即时的方式响应外部与内部的高优先级事件是实现进程控制、异常处理和系统紧急交互的核心基础。1.5 信号是什么的思维导图如下图所示1.6 如何自定义捕捉信号一个函数我们写一段代码——对任何信号进行一下捕捉mansignal信号是发给进程——处理信号是进程自己去处理的。回调函数signal函数其实是对指定信号未来进行自定义处理的一种延时设定。我们挑一个信号——这里挑选2号信号SIGINT运行一下kill-2[pid]查看信号手册我们在手册man 7 signal里面查看2号信号——要让2号信号不要终止进程调用我自定义的方法——这就叫做信号捕捉。Ctrl C就是给前台发送2号信号也终止不了了我们修改一下代码信号最终是由进程自己去处理的通过上面的代码可以验证——两个pid一样对某个信号进行设定那这个参数sig是什么我们继续验证一下本来就是设定了是2号信号为什么还要把2号信号传进来呢Linux内部不同的的信号捕捉的处理方法可以是同一个所以我们得知道是哪一个信号——我们多个信号设置处理方法可以是同一个处理方法。我们再来验证一下可以通过传入的参数来区分是哪个信号触发了自定义捕捉。IGN的参数是1我们验证一下所有的2号信号都被忽略了还有一种是恢复默认SIG_DFL我们再运行一下符合预期就是进程终止说明恢复默认了代码跑完对还是不对由退出码决定。运行一下我们发现进程果然就杀不掉了虽然1~31都能够设定自定义捕捉但是有两个信号是不能够设定的9号信号和19 / 20号新号看系统具体是哪个9号信号很重要9号信号不能被自定义捕捉、不能被忽略。2 ~ 信号的产生让OS给目标进程写信号。操作系统给目标进程写信号——不管怎么样必须经过操作系统——因为只有操作系统能够有资格修改内核数据结构。产生信号这个话题内容有点多。信号的产生是异步产生的所以不会立即处理。2.1 信号产生的方式2.1.1 使用系统命令产生kill命令在【自定义捕捉信号】那里我们已经见识过了。2.1.2 通过键盘产生信号放开循环我们运行一下我们查看手册来一一对应一下看看它对于当前进程的处理动作term和core都是进程终止Ctrl C证明我们可以通过键盘产生信号组合键的方式。为什么你如果启动一个进程之后Ctrl C可以终止这个进程Ctrl C发送了2号信号2号信号的处理动作是终止我们保留一个问题键盘怎么能够向目标进程发送信号呢键盘是个硬件啊进程是个软件啊怎么发送信号2.1.3 产生信号的还有一种方式系统调用kill发送信号给进程。第一个参数发送给哪个进程第二个参数发送哪个信号。系统底层肯定要调用这个kill。管道那里有一个对应的命令mkfifoStat获取函数的属性printf底层也是调用了同名系统调用很多命令底层用到了它的同名系统调用我们来测试一下——输出参数不匹配就给你打印一个使用手册类似于平常编译时候的报错类型要转成整数然后就可以使用kill系统调用向目标进程写入信号——运行一下我们发现多了个\n左边黄色框框我们再修改一下源代码把\r都去掉我们再运行还是前面的那种运行的图这次我们看本次运行的结果kill命令底层调用了kill系统调用——让操作系统向目标进程发送指定信号。如下图验证了9号信号不能被捕捉raise自己给自己可以发任何信号修改代码让进程自己给自己发送信号自己给自己发1秒打一次——一个系统调用可以给自己发送任意信号。raise底层封装了killabort我们修改一下代码加入abort函数运行当前进程立即终止了我们发现信号是6号信号abort也是Core终止进程6号信号通常用来进行异常终止。既把信号捕捉了进程也终止了。6号信号还很特殊可以理解为不可以被捕捉可以设置捕捉动作但是最后还是会终止进程——异常。6号信号也可以被算做是不能被捕捉、忽略的2.1.4 第四种产生信号的方式异常获取到哪个信号呢我们放开信号捕捉运行信号捕捉函数一直被触发不是因为while循环——死循环。杀掉进程11号信号——证明不是因为while(true)循环照样还是死循环我们故意来一个/0错误8号信号SIGFPE浮点异常尽管名字包含“浮点”但它实际上涵盖了更广泛的算术错误包括整数运算中的错误。观察一下除零错误会被当做信号发出来。进程自己就会收到对应的信号为什么会把进程异常当成信号进程异常是如何被OS识别、并且解释成为信号的2.1.5 第五种信号产生的方式由软件条件产生信号这里就有点抽象了。管道r端关闭W端打开W端一直写 -- OS就会把写进程直接就杀掉了操作系统认为管道不具备写条件——OS就把写进程杀掉了。你得罪了软件或者硬件操作系统都要把你杀掉。进程退出一定是异常了收到信号了。关于闹钟alarm的相关话题我们在2.4细说。2.2 三个系统调用层层递进2.2.1 三个系统调用层层递进前面的kill、raise、abort三个系统调用我们发现是层层递进的2.2.2 OS先收到键盘输入再由操作系统转换成信号发送给目标进程接下来先不往后面看先复盘一个问题我们已经说过啦必须只能是OS只有操作系统可以在内核操作系统里面对PCB内部的位图进行修改。换句话说通过键盘产生信号也并不是键盘直接产生的信号必然是OS先收到键盘的输入的再由操作系统转换成信号发送给目标进程2.3 键盘怎么能够目标进程发送信号呢1、如何理解键盘输入键盘是基于硬件中断来进行工作的2、OS如何解释快捷键组合键ctrl c、ctrl \……可能会直接解释成为信号3、OS怎么知道信号应该发送给哪一个进程呢操作系统怎么知道要补充一点网络时要用的知识2.3.1 如何理解键盘输入如何理解键盘输入我们通过图来理解一下——我的操作系统怎么知道用户把键盘按下了、按下了哪个键字符——驱动去处理的。我们关心的是OS怎么知道键盘上有数据了计算机的外设很多操作系统要做各种工作你能够轮询吗这种做法在技术上可以实现但是这会让操作系统变得很慢硬件中断作为CPU只要被动等待就行。中断是计算机组成原理的最重要的重点没有之一没有学懂中断就是没有学懂操作系统。操作系统有些东西没有学懂问题可能不在操作系统上面可能是在理解计算机组成原理上。跨学科学习是一个比较重要的思路除了冯诺依曼告诉我们的外设还有……键盘和CPU是一根线上连着的。针脚如下所示英特尔的会和主板相连。这些针脚会和主板连上所以主板走线会和外设勾连。网卡的例子。告诉CPU数据已经到来了触发中断。操作系统并不知道键盘上有数据了而是中断告诉CPU了。2.3.2 OS如何解释快捷键键盘的字符既有“ABCD……”这样的正常的字符也有“Ctrl C”“Ctrl V”……这样的组合键操作系统会把组合键解释成信号会判断ctrl c是特殊字符在ASCII码表里存在——操作系统会有系统调用给目标进程发送信号——kill(pid,signum)。2.3.3 OS怎么知道信号应该发送给哪一个进程呢说到这个我们先要谈一个进程组和作业的话题。如下图我们这里创建了三个进程三个进程的父进程都是同一个bash即这三个进程是兄弟进程。2.3.3.1 进程组进程是有组的概念2.3.3.2 会话IDSID这三个兄弟进程的SID一样属于同一个会话以bash进程命名一般情况下同一个组里面大家会使用同一个终端文件因为我们是远程登录的Xshell这里的终端文件是虚拟网络文件。每一个用户登录都要建立会话打开终端文件。如果在bash命令行里再启动一个进程我们把代码改一下把abort注释掉同一个终端下在创建一个进程——我们发现这个进程和那三个进程不在一个进程组里面但是在一个会话组里。本质是一个会话里面创建一个新的进程组哪怕进程组只有我一个进程。我们把for循环也注释掉方便ctrl c等操作2.3.3.3 前台进程和后台进程 前后台进程切换进程分前台进程和后台进程我们取地址就变成后台进程了——我们今天要把这个说法变一变。我们发现Ctrl C不能干掉进程了——再看一下观察运行的打印结果我们在代码里面把休眠时间改长一点前台进程后台进程我们只能这样删除kill-9[pid]我们把打印也注释掉只看到时候的任务号再创建一大批的任务每一个进程都有自己的进程组都属于同一个会话启动后台任务Ctrl C是杀不掉的2.3.3.3.1 前台进程定义占用当前终端必须等该进程执行完毕才能输入其他命令。示例直接执行sleep 100终端会被占用 100 秒无法输入新命令。2.3.3.3.2 后台进程定义在后台运行不占用终端用户可继续执行其他命令。启动方式在命令末尾加。sleep100输出会显示作业号[1]和进程PID。2.3.3.3.3 作业控制命令1 jobsjobs查看当前终端中的后台作业列表带作业号。输出示例[1] Runningsleep1002 fgforeground将后台作业调回前台继续运行。fg%1# 将作业号 1 的作业调到前台fg# 默认将最近一个后台作业调到前台3 bgbackground将暂停挂起的作业放到后台继续运行。先用CtrlZ暂停前台进程此时作业变为“已停止”状态。执行bg %1让它在后台继续运行。sleep200# 执行然后按 CtrlZ 暂停bg%1# 在后台继续运行jobs# 可看到状态变为 Running4 CtrlZ暂停当前前台进程将其放入后台停止状态。5 CtrlC终止前台进程。进程可以在前台或后台运行并通过fg和bg命令进行切换2.3.3.4 一些结论结论1Ctrl C只能用于终止前台进程Ctrl C只能用于终止前台进程作业 / 独立的进程组有什么关系进程组是用来完成作业的进程组允许是一个进程。作业是由进程组完成的在命令行./进程启动一个进程属于上面所说的特殊情况。task作业 / 任务——进程组和作业就像是硬币一体两面。如下图所示会话与进程组作业的作业之间的关系会话内部至少包含一个进程组就是bash。会话是由一个或者多个进程组构成的进程组的集合通常会有属于自己的终端文件通过 **fg [任务号]**把后台任务变成前台之后就可以Ctrl C删掉了。在一个会话中任何时刻只允许一个进程组在前台只要一个进程在前台我的命令就没法被其它进程执行了。这里存在两个问题1、为什么其他命令就无法执行了因为在一个会话中任何时刻只允许一个进程组在前台能够接受、执行命令的bash在哪里自动切换成为后台进程组了为什么bash变成后台了命令就无法进行了获取不到命令就无法执行命令了键盘只有一个在会话里有这么多进程谁拥有键盘谁就是前台进程。2、什么叫做前后台能够直接获取用户输入的基础叫做前台进程否则叫做后台进程因为键盘只有一个任何时刻只允许一个人输入只有一个人一个输入谁拥有终端文件主要是键盘谁就是前台获取不到键盘所以就无法输入了。终端文件键盘和显示器的集合体后台进程可以写数据向显示器打印但是后台进程无法从键盘读取数据读取的时候会被系统直接暂停掉。这就叫做【会话管理】任何时刻前台进程组只有一个键盘输入操作系统怎么知道要把信号发送给谁前台进程只有一个所以操作系统知道未来要把信号发给哪个进程只能发送给前台进程组而且前台进程只有一个前后台切换就像是“孔融让梨”。Ctrl C严格意义上不是杀掉一个进程而是杀掉一个进程组。父进程子进程都被Ctrl C杀掉了。登录两次、三次、……系统是不是每次都要创建这些东西剩下的在网络讲【守护进程】的时候再介绍。后台不允许获取代码再重编一下把前台进程被暂停了前台进程就会自动切换到后台进程。这里证明了后台进程能够打印、但是不能获取一旦获取就会暂停。谁拥有键盘谁就是前台谁能够获取键盘的输入谁就是前台。当你按键盘一定是和某个会话或者某个终端相关联。2.4 alarm设置一个若干秒之后的闹钟学习一个新的函数alarm。再认识一个信号14号信号。操作系统收到这个信号默认的处理动作是Term。2.4.1 闹钟的返回值问题我想看到的现象是收到闹钟前进程会疯狂打印cnt计数器效果计数器才加了1万多次为了对比为什么CPU计算速度这么快还是只打印1万多证明是收到了闹钟信号一万多次肯定对于当前的CPU还是太少了我们纯在内存当中做真实情况下是把一个整数加到4亿多次至于有没有回绕呢应该是没有的。为什么会有这么大的数量级上的差别的呢输出的本质是IOIO比较慢这个IO是要经过网络的要访问外设。4亿多次是因为没有访问外设直接访问了内存内存级别的操作。这样我们对CPU访问外设速度非常慢有了一个量化的认识。我们验证了闹钟本身的一些操作。如果我们设置一个20秒的闹钟在第五秒的时候就把闹钟提前唤醒了这种闹钟给一个进程只能设置一个已经设置了过了一段时间后悔了要重设闹钟下一次返回值就是返回上一个闹钟的剩余时间。验证一下如果后悔了设置闹钟为0秒就是返回上一个闹钟的剩余时间0就是取消闹钟。如下图我们先设置alarm(10);再设置成alarm(0);之后因为第一个闹钟是10秒使用返回了10 - 0 10秒。我们把闹钟取消了收不到闹钟就会死循环我们改一下代码再过n个2秒我们就再也收不到闹钟了。这就说明alarm是一个一次性闹钟而且这个闹钟只对这个进程只会有同一个闹钟从头到尾调用alarm就一个闹钟。我们可能要对闹钟进行重复设置时间得卡好下面这样写是不行的当我调用下一个的时候闹钟就收不到闹钟了——上一个闹钟根本没有响重复设置一定要保证上一个闹钟已经被触发了。一定要写在handlersig函数里此时我们就可以每隔2秒使用一次闹钟这就是闹钟的返回值问题。2.4.2 闹钟的应用场景闹钟功能具有延时触发的能力。Windows中的关机程序shutdown-t10-s带选项实现延迟关机的功能。其实严格意义上这个工作不是闹钟完成的而是定时器完成的。有点类似于“看门狗”——使用 alarm 实现看门狗B进程#includestdio.h#includestdlib.h#includeunistd.h#includesignal.h#includesys/shm.h#includesys/ipc.h#defineMAX_COUNT100#defineSHM_KEY0x1234int*counter;// 共享内存指针voidwatchdog_handler(intsignum){// 每次闹钟触发计数器减1(*counter)--;printf(watchdog: counter %d\n,*counter);if(*counter0){printf(watchdog: no feed, shutting down...\n);// 执行关机命令如 system(shutdown -h now);exit(0);}// 重新设置1秒后的闹钟alarm(1);}intmain(){// 创建/获取共享内存intshmidshmget(SHM_KEY,sizeof(int),IPC_CREAT|0666);if(shmid0){perror(shmget);exit(1);}counter(int*)shmat(shmid,NULL,0);*counterMAX_COUNT;// 初始值// 注册信号处理函数signal(SIGALRM,watchdog_handler);// 启动第一个1秒闹钟alarm(1);// 进入无限循环等待信号while(1){pause();// 等待闹钟信号触发}return0;}A进程喂狗A进程只需要通过共享内存访问计数器并定期重置#includestdio.h#includestdlib.h#includeunistd.h#includesys/shm.h#defineMAX_COUNT100#defineSHM_KEY0x1234int*counter;intmain(){// 获取共享内存intshmidshmget(SHM_KEY,sizeof(int),0666);if(shmid0){perror(shmget);exit(1);}counter(int*)shmat(shmid,NULL,0);while(1){// 模拟正常工作printf(working...\n);sleep(80);// 每隔80秒喂狗一次小于100秒即可// 喂狗重置计数器*counterMAX_COUNT;printf(feed watchdog, counter reset to %d\n,*counter);}return0;}2.4.3 理解闹钟理解闹钟看看操作系统内同时存在多种闹钟定时器操作系统要不要管理怎么管理先描述再组织。我们是先描述了怎么再组织呢如果未来5秒的闹钟没有响那么后面的15秒的50秒的、150秒的一定没响。只要关注未来超时时间最近的闹钟即可我们可以用什么数据结构来管理OS给目标进程发送SIGALARM。未来自己使用定时器应该会使用堆结构这就是为了方便理解。堆结构有缺陷不能遍历不能很好地支持取消。闹钟是单独硬件来计时吗如果是CPU来计时的话它不得很忙一边处理进程还一边计时。问题1闹钟是软件实现的问题2闹钟计时取决于操作系统是如何运行的操作系统也是个软件谁运行操作系统原因是键盘可以产生中断操作系统内部也存在一种硬件单元晶振也会触发中断中断向量表操作系统是基于中断的一种集合。一般触发时钟中断的硬件周期是固定的比如每隔一纳秒因此在OS内部就可以定义一个全局变量记录中断次数如果是100等于说从开机到现在已经过了100纳秒了次数 时间。时钟中断token中断操作系统能够算出来从开机到现在过了多少秒5秒会变成5^9次如果次数超过了就是超时。计算机里把时间转化成次数计时不是由CPU计时的由外部晶振的振动周期决定的。中断越强CPU响应能力越强。操作系统并不连续而是一卡一卡的。除0死循环标志位没清再次上下文时要先检查core dumped标志位才运行吗CPU已经识别出来了也会走中断走中断也会走中断向量表也属于异常。只要core dump一次就可以了。自定义捕捉了就没有core dump了没有走自定义捕捉就没有走系统那一套就没有core dump了。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【Linux进程间通信共享内存】为什么共享内存的 key 值由用户设置博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关文章:

【Linux信号】Linux进程信号(上):信号产生方式和闹钟

🎬 个人主页:艾莉丝努力练剑❄专栏传送门:《C语言》《数据结构与算法》《C/C干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》⭐️为天地立心,为生民立命…...

革新性PDF打印解决方案:PDFtoPrinter全场景应用指南

革新性PDF打印解决方案:PDFtoPrinter全场景应用指南 【免费下载链接】PDFtoPrinter .Net Wrapper over PDFtoPrinter util allows to print PDF files. 项目地址: https://gitcode.com/gh_mirrors/pd/PDFtoPrinter 价值定位:重新定义PDF打印体验…...

二次开发入门:修改nanobot镜像适配我的OpenClaw需求

二次开发入门:修改nanobot镜像适配我的OpenClaw需求 1. 为什么需要定制nanobot镜像 第一次接触OpenClaw时,我直接使用了官方提供的标准镜像。但在实际使用中,发现几个痛点:默认的chainlit界面过于简单,无法展示我需要…...

搭建专属汽车电子测试 AI 助手

专栏:《AI 汽车电子测试实战》第 15 篇 作者:一线汽车电子测试工程师 适合人群:想搭建私有 AI 助手的测试团队、关注数据安全的工程师开篇:为什么需要专属 AI 助手? 这是我上个月在某车企的 AI 部署项目中的真实经历。…...

收藏!AI大模型产品经理学习路线(2026最新),从零基础到专家,收藏这一篇就够

一、AI产品经理和和通用型产品经理的异同: 市面上不同的公司对产品经理的定位有很大的差别,一名合格的产品经理是能对软件产品整个生命周期负责的人。 思考框架相同: AI产品经理和通用型软件产品经理的底层思考框架是一样的,都是…...

进阶篇第5节:共享内存(三)——实战:优化矩阵乘法(Tiling技术)

第二篇进阶篇第5节:共享内存(三)——实战:优化矩阵乘法(Tiling技术) 从朴素到分块,从分块到极致——矩阵乘法的优化之路,就是CUDA性能优化的缩影 写在前面 矩阵乘法是CUDA优化中最经典的案例,没有之一。在筑基篇,我们实现了朴素版本和基础分块版本,性能从 252 GFLO…...

Agent Skill 从使用到原理,一次讲清

目录前言1. 本期内容概览2. Agent Skill 是什么3. Agent Skill 的基本用法4. 高级用法(Reference)5. 高级用法(Script)6. 渐进式披露机制7. Agent Skill vs MCP结语参考前言 学习 UP 主 马克的技术工作坊 的 Agent Skill 从使用到…...

OpenClaw常用命令与在Windows下安装Tavily-Search

目录1. Windows安装Tavily-Search2. 启动与关闭2.1 正常流程2.2 故障处理3. 模型切换1. Windows安装Tavily-Search 确保目录位于C:\Users\用户名运行命令npx clawhub install openclaw-tavily-search在C:\Users\用户名\.openclaw创建文件.env用记事本打开.env,写入…...

SAP Fiori Launchpad 中 Spaces 与 Pages 的传输机制:从对象关系到项目落地的完整实践

在很多 SAP Fiori 项目里,团队把精力放在了应用开发、业务角色设计、SAPUI5 组件装配,或者 Fiori Elements 的元数据驱动页面构建上,却常常低估了一个看似普通、实际上极易影响上线结果的环节:Spaces 与 Pages 的传输。 这个主题之所以重要,不是因为操作本身复杂,而是因…...

3步精通FanControl:从噪音难题到智能散热的技术蜕变

3步精通FanControl:从噪音难题到智能散热的技术蜕变 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧

OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧 1. 为什么需要关注Token消耗 当我第一次在本地部署OpenClaw并接入GLM-4.7-Flash模型时,最让我震惊的不是它的自动化能力,而是执行简单任务后查看账单时的Token消耗数字。一个看似…...

OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控

OpenClaw故障自愈方案:Qwen3-32B镜像异常重启监控 1. 问题背景与解决思路 上周我的OpenClaw自动化助手突然"罢工"了——原本应该定时执行的日报生成任务没有按时完成。排查后发现是底层Qwen3-32B模型服务因OOM异常退出。这种情况在长期运行的AI服务中并…...

5步掌握抖音音乐批量下载:douyin-downloader高效使用指南

5步掌握抖音音乐批量下载:douyin-downloader高效使用指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作的浪潮中,背景音乐已成为视频作品的灵魂元素。然而&#xff0…...

string字符串基础相关知识

课程要求1.string的三种创建方式2.string常用方法空格处理,空值判断,替换操作,字符串截取,字符串拆分,字符索引访问拼接与性能,删除操作3.理解 string 不可变性,能在循环拼接场景中使用 StringB…...

ISIS实验1

ISIS实验1网络拓扑配置一、AR1二、AR2三、测试1. 查看 IS-IS 邻居状态2. 查看 IS-IS 接口信息3. 查看 IS-IS 路由表4. 查看 IP 路由表中的 IS-IS 路由5. 查看链路状态数据库(LSDB)6. 检查:Level-1 区域一致性四、AR3五、AR4六、检测1. 通过链…...

hot100——二分查找

4.寻找两个正序数组的中位数解题思路首先,题目中已经说明,是正序,那么nums1以及nums2中都是从小到大进行排列的;又因为题目中要求时间复杂度为O(log(mn)),一般看到这种时间复杂度是O(log……)形式的,基本上…...

屠龙刀法35--使用SQL查询器批量生成insert语句

很多网友认为SQL查询器的语句不都是人工输入或者从外面粘贴进去的吗?用查询器批量生成Insert语句感觉有点魔幻哦。的确听起来不太科学,但是对于DBCS来说这个功能的确非常好用。下面我们就举例一步步告诉大家,如何使用这个功能。 第一步&…...

微信JS-SDK分享失败?深度解析“offline verifying”权限验证错误与高效排查指南

还在为微信网页自定义分享功能频繁遭遇“updateAppMessageShareData:fail, the permission value is offline verifying”而头疼?本文将从公众号认证、JS-SDK权限、域名绑定、网络、缓存及API版本六大维度,为您深度剖析此错误成因,并提供一套…...

Wan2.2-I2V-A14B开源大模型:支持ONNX导出与边缘设备轻量化部署探索

Wan2.2-I2V-A14B开源大模型:支持ONNX导出与边缘设备轻量化部署探索 1. 开箱即用的私有部署方案 Wan2.2-I2V-A14B是一款强大的文生视频开源大模型,专为RTX 4090D 24GB显存环境深度优化。这个私有部署镜像已经内置了完整的运行环境和所有必要组件&#x…...

基于MATLAB的VSG逆变器无源性分析与稳定性研究

基于MATLAB的VSG逆变器无源性分析与稳定性研究 摘要 随着分布式发电和微电网技术的快速发展,逆变器作为新能源并网的关键接口,其稳定性问题日益突出。虚拟同步发电机(VSG)控制技术通过模拟同步发电机的机电特性,为逆变器提供惯性和阻尼支撑,成为提升系统稳定性的重要手…...

EdB Prepare Carefully:定制你的RimWorld完美开局体验

EdB Prepare Carefully:定制你的RimWorld完美开局体验 【免费下载链接】EdBPrepareCarefully EdB Prepare Carefully, a RimWorld mod 项目地址: https://gitcode.com/gh_mirrors/ed/EdBPrepareCarefully 是否厌倦了RimWorld随机生成的殖民者团队带来的不确定…...

3种策略实现百度网盘提取码智能解析效率提升85%

3种策略实现百度网盘提取码智能解析效率提升85% 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 副标题:分布式检索技术突破与资源获取效率革命 核心痛点:为何获取提取码成为数字资源流通的主要瓶颈&am…...

COMSOL数值模拟:N2和CO2混合气体在THM热流固三场耦合下增强瓦斯抽采

COMSOL数值模拟,实现N2和CO2混合气体在THM热流固三场耦合情况下增强瓦斯(煤层气抽采)煤层气抽采效率提升这事儿,最近在实验室搞了个骚操作——往煤层里怼氮气和二氧化碳的混合气。说人话就是拿这俩气体当开塞露,把卡在…...

测试用例设计-XMind

🚀 一、XMind 用例设计核心思路👉 和传统Excel不同,XMind强调:以“功能模块”为主干 以“用户场景”为分支 以“测试点”为叶子节点👉 本质结构:模块 → 场景 → 用例点 → 具体测试数据/预期📌…...

不换硬件,速度翻倍:本地 LLM 推理加速实战

同一块 RTX 3090,同一个 70B 模型,推理速度从 30 t/s 提升到 160 t/s,并且不花一分钱。作者 Amar Chetri 博士在这篇文章中介绍了三种纯软件优化技术:speculative decoding、multi-token prediction 和自动化超参数调优&#xff0…...

QRazyBox:5分钟解决二维码修复难题的专业工具

QRazyBox:5分钟解决二维码修复难题的专业工具 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 二维码已经成为现代生活中无处不在的数字桥梁,但你是否遇到过这样的情况&…...

SEO_2024年最新SEO策略与趋势深度解析(352 )

<h2>2024年最新SEO策略与趋势深度解析</h2> <p>在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;依然是网站流量和品牌影响力的核心驱动力。2024年&#xff0c;随着互联网技术的不断进步&#xff0c;SEO策略和趋势也在不断演变。本文将详细…...

探索粗糙表面波动模型生成:打造不规则之美

粗糙表面&#xff0c;波动模型生成&#xff0c;用于在物体表面生成不规则的粗糙表面&#xff0c;或面表面的波动边界等&#xff0c;可自定义波动分布与赋值。在图形学和模拟领域&#xff0c;生成物体表面的粗糙质感或是波动边界常常是一个有趣又具有挑战性的任务。今天咱们就聊…...

League Akari:5大核心解决方案提升英雄联盟游戏体验

League Akari&#xff1a;5大核心解决方案提升英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一…...

Simulink与Plecs联合仿真实现三相桥式电路能量双向流动

simulinkplecs联合仿真源件&#xff0c;三相桥式电路&#xff0c;采用母线电压外环与电流内环控制&#xff0c;可整流也可逆变并网&#xff0c;实现能量双向流动&#xff0c;采用SVPWM调制方式。 1.plecssimulink 2.SVPWM 3.双闭环 支持simulink2022以下版本&#xff0c;联系跟…...