Linux——信号概念与信号产生方式
目录
一、概念
二、前台进程与后台进程
1.ctrl+c
2.ctrl+z
三、信号的产生方式
1.键盘输入产生信号
2.系统调用发送信号
2.1 kill()函数
2.2 raise()函数
2.3 abort()函数
3.异常导致信号产生
3.1 除0异常
3.2 段错误异常
4.软件条件产生信号
4.1 管道
4.2 闹钟
四、核心转储
总结
一、概念
生活中,我们也经常遇到信号,比如早八的闹钟、红绿灯、鲁大师在电脑里面抽烟、周杰伦的到底有谁知道~是几点的方向~你~才~会~收~到~暗~号~。在信号还没有产生的时候,我们已经知道什么样的信号需要如何去处理,比如早八的闹钟,在闹钟响之前,我们就知道早上要么起床去上课,要么把闹钟一关继续睡觉。
信号产生了,我们不一定要立即处理他,而是在合适的时候处理。比如你肚子疼,需要拉肚子,但是游戏已经开了,对抗路已经在操作了,今天不管,你有本事就拉裤兜,必须先把这把打完再去。因此我们要对信号进行暂时保存。
同时,我们并不清楚具体什么时候肚子痛,因此信号到来相对于我现在正在打的游戏,是异步(多执行流同时进行操作)的。
小总结:
我们能识别信号,同时知道该如何处理
信号是异步的
可以对信号进行暂时保存
在合适的时候处理信号
信号是向目标进程发送消息通知的一种机制。
二、前台进程与后台进程
1.ctrl+c
进程在运行时,一般都是前台进程,如下代码,./mytest运行起来,我们输入命令没用反应,但我们运行时输入ctrl+c可以终止掉进程。
如果我们执行的时候在后面加上 & ,就让进程在后台运行,此时输入命令可以反应,但是进程不能被ctrl+c终止。
这是因为前台进程只能有一个,后台进程可以有多个,由于shell也是一个进程,因此当进程在前台运行时,shell需要退入到后台进程中去,因此无法接受指令。而你现在输入ctrl+c终止进程,就是让前台进程终止,自然进程就结束了。
而当你进程以后台方式启动时,前台进程是shell,因此输入指令可以有结果,如果你输入ctrl+c,shell自己会保护自己,无法被ctrl+c终止,后台进程并没有收到ctrl+c,因此无法终止后台进程。
之前我们提到,后台进程可以有多个,比如现在我们重定向到log1.txt与log2.txt,输入指令jobs可以看到后台进程的运行情况。
他们在后台运行,并不影响前台shell接受指令,同时ctrl+c也无法终止。
我们输入fg + number,就可以将后台进程提到前台来,输入ctrl+c就可以终止掉该进程了。
小总结:判断是前台进程还是后台进程,看shell有没有能力接受用户输入,有就是后台进程,没有就是前台进程。
2.ctrl+z
输入ctrl+z可以暂停前台进程,但是被暂停的进程会自动放到后台,也就是我输入指令命令行能接受了。
现在我们输入 bg+number ,就可以将暂停的后台进程继续运行。
小总结:
- ./mytest & 让进程在后台运行
- jobs 查看后台进程
- fg + number 将后台进程放到前台
- ctrl+z 暂停前台进程并放到后台
- bg + number 将暂停的后台进程继续执行
三、信号的产生方式
1.键盘输入产生信号
在上面,我们学习ctrl+c终止前台进程,其实ctrl+c的本质上就是信号,他是信号表中的2号信号。
我们可以通过写代码的方式来查看该现象。
signal函数:能将收到的信号做自定义处理
- 参数1:信号num
- 参数2:返回值为void,参数为int的函数指针
#include<iostream>
#include<unistd.h>
#include<signal.h>using namespace std;void sighandler(int signo)
{cout<<"收到了"<<signo<<"号信号"<<endl;exit(1);
}int main()
{signal(2,sighandler);while(1){cout<<"pid: "<<getpid()<<endl;sleep(1);}
}
运行后发现,输入ctrl+c,会打印出内容,同时发送2号指令也会打印出相同的内容,由此可见,ctrl+c 等价于发送2号信号 。也就是键盘输入可以产生信号。
- 我们知其然,还要知其所以然。
- 我们在键盘中输入ctrl+c,会被操作系统接受到你的输入,因为操作系统是进程的管理者,他判断出你输入的内容是终止信号,同时是输入给当前运行的前台进程的。那么操作系统肯定需要告诉进程,信号到来了,你赶紧处理。
- 在进程的角度来看,进程一定要通过存储来表示自己是否收到信号,收到了哪种信号。这完全可以通过位图来实现,比特位的位置代表收到的哪种信号,比特为的内容0/1代表是否收到信号。由于普通信号只有1-31个,因此用32位的整形变量就可以判断了。
- 我们之前提到,在信号没有到来时,进程就已经知道该如何处理相关信号,因此进程还得有一张自己的函数指针数组,数组的下标与信号的编号相关,于是,当发现信号位图中有信号的到来,知道是哪一张信号,然后会调用信号相关的函数进行执行。
- 操作系统向目标进程发送信号,其实本质上是写信号,将该进程信号位图的相关位置设置为1
那么既然ctrl+c是一个信号,之前我们学过的ctrl+z,也应该是信号咯。当然没错,ctrl+z是20号信号SIGTSTP。还有ctrl+\,是3号信号
跟之前一样,使用signal捕获一下2号信号,3号信号,和20号信号。
9号信号不可被自定义捕捉,因为操作系统得有能力杀死任意进程,如果某个进程是恶意进程,一直在读取你的数据,或者对操作系统做破坏,那么该进程捕捉了所有信号,岂不是杀不掉了,因此操作系统设置9号信号不可被捕捉。
2.系统调用发送信号
2.1 kill()函数
有一个kill的系统调用函数,他可以往指定的进程发送指定信号。我们可以通过该函数来发送信号。
kill:给指定进程发送信号
- 参数1:进程pid
- 参数2:信号编号
代码如下
#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<string>using namespace std;void Usage(const string& proc)
{cout<<"\n Usage: "<< proc <<" -signumber process"<<endl;
}int main(int argc,char* argv[])
{if(argc!=3){Usage(argv[0]);exit(0);}int signumber = stoi(argv[1]+1);int processpid = stoi(argv[2]);kill(processpid,signumber);
}
我们就可以利用kill函数,给他传信号与进程pid,即可将信号发送给此进程。
2.2 raise()函数
kill是给任意进程发送任意信号,而raise是给自己发送任意信号
kill:给指定进程发送信号
- 参数1:信号编号
使用很简单,如下,raise(2)代表给自己发送2号信号
因为我们自定义捕捉了,因此会一直收到2号信号。
2.3 abort()函数
给自己发送abort信号,是6号信号,参数返回值都不管,直接调用即可。
我们发现,进程确实收到了6号信号,我们sighandler里面并没有让进程退出,但是进程却被Aborted终止,这是abort函数的特点,就是进程收到6号信号,你可以自定义捕捉,但捕捉完毕我仍然会终止。
3.异常导致信号产生
C++我们学过异常,发生异常了,代码并不会再往后面执行,而是直接终止,除非你捕获了异常。
3.1 除0异常
如下代码,你发生了除0错误,编译的时候就会警告,当你执行的时候,告诉你浮点数异常。这是8号信号 SIGFPE。
我们将信号捕捉,运行,我们并没有写循环,按道理只会打印一次,这里发现进程在一直打印消息。
这是因为进程在运行的时候,会将进程中的数据放到CPU里面的寄存器去运行,现在CPU运算发现了除0错误,会给相应的标志位写上1,记录你的错误,操作系统就知道进程的错误了(因为操作系统是软硬件资源的管理者),那么操作系统需要发送对应信号干掉目标进程。
但是你自己的操作,将信号自定义捕捉了,杀死不了,而后进程就切换了,当进程又切换回来时,操作系统又发现你对应的标志位为1,因此又给你发送信号,从此往复,会一直发送信号,却又杀不掉你。
3.2 段错误异常
我们写C/C++代码的时候,经常会遇到段错误。比如野指针,越阶访问等等。段错误异常是11号信号SIGSEGV,因此我们捕捉11号信号看看结果。
跟之前一样,没有写循环,依然一直报错。这是在访问虚拟内存页表时,发现页表中没有对应内容虚拟到物理的映射。发生段错误,标志位设置,操作系统发送信号给进程,进程收到信号并自定义捕捉,进程切换,又回到该进程,发现标志位为1,继续发送信号,继续套娃。
4.软件条件产生信号
4.1 管道
我们之前在学习管道的时候,当我们把读端关闭的时候,写端会直接终止,因为操作系统给写端发送SIGPIPE信号,告诉写端,兄弟别舔了,她已经把你拉黑了。此时我们并没有涉及到寄存器或者其他硬件设备,虽说有内存,但是内存空间都是我自己开辟的呀,我自己的东西我爱咋用咋用,操作系统不会无缘无故给你发信号,这就叫软件条件。
4.2 闹钟
alarm:可以设置闹钟->给当前进程发送14号信号
参数:设置几秒中后的闹钟
返回值:正常返回0,闹钟提前返回剩余时间。
在5次打印后收到了消息,返回值为0。
综上,产生信号的方式有很多,但是发送信号只能由操作系统来完成!!!也就是向进程PCB中的信号位图写入。
四、核心转储
首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁 盘上,文件名通常是core,这叫做Core Dump。
命令行输入指令 man 7 signal ,往下翻可以查看信号的详细信息,这里可以看到信号的动作有Term、Core、Ign(ignore)、Cont(continue)、Stop。
其他的都比较好理解,比如Ign忽略,Cont继续,Stop暂停。但是还有Term和Core这两种,我们学过的信号这两种类型都有,他们都是终止进程,有什么区别呢?
我们发现Core中有SIGABRT、SIGFPE、SIGSEGV等等,他们都比较像异常情况。报错的具体代码尚不清楚。需要用户进一步排查
而Term中的SIGINT(键盘中断)、SIGKILL(杀死进程)等等,其实他们都没犯错, 只是被杀掉了。结果很清楚
你的代码如果出现了Core类型的错误,其实会发生core dump(核心转储),也就是在当前目录下多出一个以进程pid命名的 core.pid 文件。我们可以通过查看gbd查看代码具体报错位置信息。但是core dump功能是被默认关闭的。
输入指令ulimit -a可以查看系统的配置项,其中第一项core file size就是core dump,大小为0,我们可以将他大小设置一下
输入指令ulimit -c + size,就可以更改core file size 的大小,这是内存级别的,也就是重启xshell会自动恢复。
现在再更改代码并运行就会发现多了core dumped,发生了核心转储。
我们现在gdb调试mytest,同时在gdb中输入core-file + core.pid ,此时就可以看到该文件是在具体哪个地方出错。
总结
- 信号的产生,最终都要由操作系统来进行执行,这是因为操作系统是进程的管理者。
- 进程在信号到来不会立即处理,而是在合适的时候处理。
- 由于信号不会被立即处理,因此信号需要暂时被进程记录下来,记录在信号位图中。
- 信号在没有收到信号的时候,已经知道自己该如何处理信号。
- 操作系统向进程发送信号,本质是向目标进程的信号位图中写信号(置1)。
下一章:信号的保存与处理
相关文章:
![](https://img-blog.csdnimg.cn/direct/948e80b95b8745fe81620f083dd379f8.png)
Linux——信号概念与信号产生方式
目录 一、概念 二、前台进程与后台进程 1.ctrlc 2.ctrlz 三、信号的产生方式 1.键盘输入产生信号 2.系统调用发送信号 2.1 kill()函数 2.2 raise()函数 2.3 abort()函数 3.异常导致信号产生 3.1 除0异常 3.2 段错误异常 4.软件条件产生信号 4.1 管道 4.2 闹钟…...
![](https://img-blog.csdnimg.cn/direct/158029655ff14c2daafedaa0d78a7f1c.png)
赋值语句还能当判断条件?涨芝士了!
赋值和条件看似是C语言中毫不相关的两个概念,虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现,但是现在在学习的过程中,为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
数据结构 - 算法效率|时间复杂度|空间复杂度
目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量,算法复杂度描述了算法在输入数据规模变化时,其运行时间和空间…...
![](https://img-blog.csdnimg.cn/direct/6a6c95a60b9c4edd97d6d783964c1d2a.png#pic_center)
接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送
接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…...
![](https://img-blog.csdnimg.cn/img_convert/6ac66c6184a56e87e2519d604a7e05d4.gif)
『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战
🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…...
![](https://img-blog.csdnimg.cn/direct/58f1058b26e349ad8428bd0bf7eda6e7.png)
【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了
【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是?各自的功能是什么?2、说一下一次完整的HTTP请求…...
![](https://www.ngui.cc/images/no-images.jpg)
『大模型笔记』常见的分布式并行策略(分布式训练)
常见的分布式并行策略(分布式训练) 文章目录 一. 为什么分布式训练越来越流行二. 常见的并行策略2.1 数据并行2.2 模型并行2.3 流水并行2.4 混合并行二. 参考文献一. 为什么分布式训练越来越流行 近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广…...
![](https://img-blog.csdnimg.cn/direct/610eec54ce894ab083029f0c8ed6d19d.png)
java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ 可定制化
工程项目管理软件是现代项目管理中不可或缺的工具,它能够帮助项目团队更高效地组织和协调工作。本文将介绍一款功能强大的工程项目管理软件,该软件采用先进的Vue、Uniapp、Layui等技术框架,涵盖了项目策划决策、规划设计、施工建设到竣工交付…...
![](https://img-blog.csdnimg.cn/img_convert/99ecc2e583a2ee3146d45b31eff98ca6.png)
3D数据格式导出工具HOOPS Publish如何生成高质量3D PDF?
在当今数字化时代,从建筑设计到制造业,从医学领域到电子游戏开发,3D技术已经成为了不可或缺的一部分。在这个进程中,将3D模型导出为3D PDF格式具有重要的意义。同时,HOOPS Publish作为一个领先的解决方案,为…...
![](https://www.ngui.cc/images/no-images.jpg)
【springboot】闲话 springboot 的几种异步机制 及 长轮询的概念和简单实现
文章目录 引子springboot的几种异步形式开启异步支持和线程池配置(重要)第一种:Async第二种:Callable<T>第三种:WebAsyncTask<T>第四种:DeferredResult<T> 长轮询的简单实现概念实现服务…...
![](https://img-blog.csdnimg.cn/direct/eef4443b8a324d7bbb10bea7f3e5747c.jpeg)
Mysql---安全值守常用语句
文章目录 目录 文章目录 一.用户权限设置 用户设置 元数据查询 Union联合查询 分组查询 字符串函数 总结 一.用户权限设置 用户设置 #用户创建 create user "用户名""%主机名" identified by "密码" #用户删除 drop user 用户名 #用户查询…...
![](https://www.ngui.cc/images/no-images.jpg)
containerd快速安装指南
1 containerd快速安装指南🚀 本指南旨在提供一个简洁有效的方法来安装containerd。我们将通过一份易于理解的脚本步骤,指导您完成安装🔧。请根据您的实际需求,适当调整containerd版本及其相关依赖。 注意事项: 本安装…...
![](https://www.ngui.cc/images/no-images.jpg)
Javascript - 正则表达式相关的一些基础的范例
很久以前的一些学习资料,归档发布; 正则表达式的基础,以HTML代码来示范: <html><head><title></title><script language"javascript">function test(){//从页面要求客户输入一个字符串…...
![](https://www.ngui.cc/images/no-images.jpg)
JUC:线程活跃性(死锁、活锁、饥饿)
文章目录 线程活跃性死锁活锁解饿 线程活跃性 死锁 两个线程相互等待对方已拥有的锁,就会相互一直等待,不会停止。 t1拥有a锁,等待b锁。 t2拥有b锁,等待a锁。 Slf4j(topic "c.Test3") public class st3 {public st…...
![](https://www.ngui.cc/images/no-images.jpg)
RGB到灰度图像的转换原理及例程
RGB到灰度图像的转换是一种常用的图像处理操作,其原理是根据人眼对不同颜色的敏感度,将彩色图像的红、绿、蓝三个通道的像素值按照一定权重进行加权平均,得到灰度图像的像素值。 在RGB图像中,每个像素点由红、绿、蓝三个分量组成…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!
PCADBODBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper! 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…...
![](https://www.ngui.cc/images/no-images.jpg)
创建数据库与表单以及管理表单和数据
一、用于创建数据库的命令以及作用 命令作用CREATE DATABASE 数据库名称创建新的数据库DESCRIBE 表单名称描述表单UPDATE 表单名称SET attribute新值WHERE attribute>原始值更新表单中的数据USE 数据库名称指定使用的数据库SHOW databases显示当前已有的数据库SHOW tables显…...
![](https://www.ngui.cc/images/no-images.jpg)
Milvus+ATTU环境搭建
1.使用Docker Compose安装Milvus Standalone 下载安装单机版milvus向量数据库 https://milvus.io/docs/install_standalone-docker.md wget https://github.com/milvus-io/milvus/releases/download/v2.2.12/milvus-standalone-docker-compose.yml -O docker-compose.yml sud…...
![](https://img-blog.csdnimg.cn/direct/41b342eb90f6464ea06859d35a6ec88a.png)
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 一、简单介绍 二、简单图像浮雕效果实现原理 三、简单水彩画效果案例实现简单步骤 四、注意事项…...
![](https://img-blog.csdnimg.cn/direct/72cff2dff3994652a56dbb08d9a930aa.png)
Chrome浏览器 安装Vue插件vue-devtools
前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同,Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览:这个功能可以让你查…...
![](https://img-blog.csdnimg.cn/direct/6b8e1b197d934c838954f2216d988fe6.png)
相册清理大师-手机重复照片整理、垃圾清理软件
相册清理大师是一款超级简单实用的照片视频整理工具。通过便捷的操作手势,帮助你极速整理相册中的照片和视频、释放手机存储空间。 【功能简介】 向上滑动:删除不要的照片 向左滑动:切换下一张照片 向右滑动:返回上一张照片 整理分…...
![](https://img-blog.csdnimg.cn/direct/f10971c1e5fe4bfd9173869e0842ef19.png)
【GitLab】Ubuntu 22.04 快速安装 GitLab
在 Ubuntu 22.04 上安装最新版本的 GitLab,可以按照以下步骤操作: 1. 更新系统: 在终端中执行以下命令以确保系统是最新的: sudo apt update sudo apt upgrade2. 安装依赖: 安装 GitLab 所需的依赖包: …...
![](https://img-blog.csdnimg.cn/direct/8ea71e2f90714286b77de0644560b187.png)
Linux重点思考(下)--shell脚本使用以及内核开发
Linux重点思考(下)--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值,说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……...
![](https://www.ngui.cc/images/no-images.jpg)
2024世界技能大赛某省选拔赛“网络安全项目”B模块--应急响应解析
广东省第三届职业技能大赛“网络安全项目”B模块任务书 PS: 关注鱼影安全第一部分 网络安全事件响应任务 1:应急响应第二部分 数字取证调查第三部分 应用程序安全:需要环境可以私信博主~PS: 关注鱼影安全 模块 B 竞赛项目试题 本文件为:2024世界技能大赛某省选拔赛-模块 B …...
![](https://img-blog.csdnimg.cn/img_convert/6a8be7fe2f924c9a42b4164e0474d00e.png)
苹果与百度合作,将在iPhone 16中使用生成式AI
3月25日,《科创板日报》消息,苹果将与百度进行技术合作,为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI(AIGC)功能。 据悉,苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…...
![](https://img-blog.csdnimg.cn/direct/fe7fe9a0a3e24063b2b1ab8dfe0decc5.png)
java中的单例模式
一、描述 单例模式就是程序中一个类只能有一个对象实例 举个例子: //引出单例模式,一个类中只能由一个对象实例 public class Singleton1 {private static Singleton1 instance new Singleton1();//通过这个方法来获取实例public static Singleton1 getInstance…...
![](https://www.ngui.cc/images/no-images.jpg)
pytorch笔记篇:pandas之数据预处理(更新中)
pytorch笔记篇:pandas之数据预处理 pytorch笔记篇:pandas之数据预处理(更新中)测试例代码相关的算子 pytorch笔记篇:pandas之数据预处理(更新中) 测试例代码 print(train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]]) # (※1) 为什么test_da…...
![](https://img-blog.csdnimg.cn/direct/3b418e7c82ed4f3fa88978628a5f2e18.png)
【安全用电管理系统的应用如何保证用电安全】Acrel-6000安科瑞智慧安全用电解决方案
政策背景 国家部委 ※2017年5月3日国务院安委会召开电气火灾综合治理工作视频会议,决定在全国范围内组织开展为期3年的电气火灾综合治理工作。 公安部领导 ※公安部副部长李伟强调:向科技要战斗力,加快推进“智慧消防”建设不断提升火灾防控…...
![](https://img-blog.csdnimg.cn/direct/ca6ff7d16f3a4813b65a8cb952b17889.png)
数据分析之POWER Piovt透视表分析
将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份,鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份,借助month的函数双击日期 选择月份这列----按列排序-----选择月…...
![](https://img-blog.csdnimg.cn/direct/a5fe6c6d3fe24c7fbc14f7437468cd31.png)
机器人寻路算法双向A*(Bidirectional A*)算法的实现C++、Python、Matlab语言
机器人寻路算法双向A*(Bidirectional A*)算法的实现C、Python、Matlab语言 最近好久没更新,在搞华为的软件挑战赛(软挑),好卷只能说。去年还能混进32强,今年就比较迷糊了,这东西对我…...
![](/images/no-images.jpg)
做网站前端和平面配合/班级优化大师下载安装
一、什么是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,…...
![](https://img-blog.csdnimg.cn/5996922bd2e74b0bae2d85358ff05365.png)
艺术设计类网站/互联网平台有哪些
简介 VScode插件默认安装路径: C:\Users<username>.vscode extensions 文件夹里是各个插件,而 extensions.json 则是描述。 解决:将 extensions 文件夹移至别处任意目录即可。 我将其剪切到:G:\MySofts\VScode-extern 操…...
![](https://img-blog.csdnimg.cn/20210129185004328.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTQxNzI2,size_16,color_FFFFFF,t_70)
网页设计与制作摘要/南宁seo标准
Spring——IOC(控制反转) 文章目录一、IOC容器 1、什么是IOC(控制反转) 2、IOC底层 3、Spring提供的IOC容器实现的两种方式(两个接口) 4、ApplicationContext接口的实现类(具体根据API文…...
![](https://images2017.cnblogs.com/blog/1221651/201710/1221651-20171014005346012-732302729.png)
深圳商城网站开发/沈阳今日新闻头条
1.编写一个方法,使用以上算法生成指定数目的随机整数 2.请看以下代码,你发现有什么特殊之处吗? 两个计算的方法的方法名只有参数类型和返回值类型不一样,仍然能输出结果,进行了方法的重载。 3.查看一下JDK中System.out…...
![](/images/no-images.jpg)
建设银行 企业网站/seo优化服务是什么
1.常规方法,用两个栈分别保存数字和符号 import reclass Solution:def calculator(self, expression):# 定义符号优先级prority {"": 1, "-": 1, "*": 2, "/": 2}# 使用数字栈和符号栈分别存放number_stack, operator_st…...
![](/images/no-images.jpg)
建筑工程承包网址大全/免费seo关键词优化方案
1、微型计算机系统中的中央处理器通常是指( )A.内存储器和控制器B.内存储器和运算器C.运算器和控制器D.内存储器、控制器和运算器2、存储器可分为哪两类( )A.硬盘和软盘B.ROM和EPROMC.RAM和ROMD.内存储器和外存储器3、最早的计算机的用途是用于( )A.科学计算B.自动控制C.辅助设…...