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

芜湖龙湖建设网站大连金豆网站建设

芜湖龙湖建设网站,大连金豆网站建设,网站首页代码在哪里,微网站解决方案一.什么是信号 生活中#xff0c;有哪些信号相关的场景呢#xff0c;比如#xff1a;红绿灯#xff0c;闹钟#xff0c;转向灯等等 1.这里我们要知道#xff0c;你为什么认识这些信号呢#xff0c;记住了对应场景下的信号#xff0b;后续是有”动作“要你执行的 2.我们…一.什么是信号 生活中有哪些信号相关的场景呢比如红绿灯闹钟转向灯等等 1.这里我们要知道你为什么认识这些信号呢记住了对应场景下的信号后续是有”动作“要你执行的 2.我们在我们的大脑中能够识别这个信号的 3.如果特定信号没有产生但是我们依旧知道应该如何处理这个信号 4.我在收到这个信号的时候可能不会立即处理这个信号 5.信号本身在我们无法立即被处理的时候也一定要先被临时的记住  结论什么是Linux信号本质是一种通知机制用户or操作系统通过发送一定的信号通知进程某些事件已经发生你可以在后续进行处理。 二.信号如何使用结合进程信号结论 1.进程要处理信号必须具备信号“识别”的能力(看到处理动作) 2.凭什么进程能够“识别”信号呢代码是程序员编写的就比如说你是如何认识红绿灯的这都是有人告诉你的 3.信号产生是随机的进程可能正在忙自己的事情所以信号的后续处理可能不是立即处理的 4.进程会临时的记录下对应的信号方便后续进行处理 5. 在什么时候处理呢合适的时候(这个后面会说) 6.一般而言信号的产生相对于进程而言是异步的(什么是异步呢异步双方不需要共同的时间也就是接收方不知道发送方什么时候发送所以在发送的信息中就要有提示接收方开始接收的信息如开始时有开始位同时在结束时有停止位。) 三.信号常见的处理方式 1.默认(进程自带的程序员写好的逻辑) 2.忽略(信号的一种处理方式) 3.自定义动作(捕捉信号) 四.常见信号 1-31普通信号34-64实时信号。 如何理解组合键变信号键盘的工作方式是通过:中断方式进行的当然也能够识别组合键ctrlcOS解释组合键-查找进程列表-前台运行的进程-OS写入对应的信号到进程内部的位图结构中。  如何理解信号被进程保存进程必须具有保存信号的相关数据结构(位图unisgned int)PCB内部保存了信号位图字段。 如何理解信号发送的本质信号位图是在task_struct - task_struct内核数据结构-OS。 信号发送的本质OS向目标进程写信号OS直接修改pcb中的指定的位图结构完成“发送”信号的过程。 五.信号的产生以及核心转储 键盘产生信号 sighandler_t handler回调函数通过回调的方式修改对应信号的捕捉方法signum要捕捉信号的名称或编号。 #includeiostream #includesignal.h #includeunistd.h #includesys/types.h using namespace std;void cating(int signum) {cout捕捉到信号signumendl;return; }int main() {signal(2,cating);while(1)sleep(1);return 0; } signal(SIGINT,catchsig)特定信号的处理动作一般只有一个signal函数仅仅是修改进程对特定信号的后续处理动作不是直接调用对应的处理动作如果后续没有任何SIGINT信号产生,catchsig永远也不会被调用。 核心转储 man 7 signal 查看信号的默认处理行为。这里不同信号的Action不同有Term、Core、Ign、Cont、Stop等状态行为。 接下来就是了解一下Core动作——核心转储(一般而言云服务器的核心转储功能是被关闭的)。关于进程等待中status 中如果是正常终止就保存返回值、错误码。 如果被信号所杀第7位上保存的这个就叫做core dump如果是0表示没有发生核心转储为1则是发生了核心转储。我们可以打印code_dump位的信息 (左移7位然后与上1即可)。  #includeiostream #includesignal.h #includeunistd.h #includesys/types.h using namespace std;void cating(int signum) {cout捕捉到信号signumendl;return; } int main() {pid_t id fork();if (id 0){sleep(1);int a 100;a / 0;exit(0);}int status 0;waitpid(id, status, 0);cout 父进程: getpid() 子进程: getppid() endl;//退出信号cout exit sig (status 0x7f) endl;// 打印core dump位cout core dump (status 7 1) endl; }如果核心转储是被关闭的可以使用ulimit -a查看ulimit -c10240打开这里就可以使用core.11077就可以定位错误。 系统调用发送信号  第一个参数为指定的进程pid第二个参数为对应的信号编码。 kill 是给指定进程发送信号而如果想让自己给自己发信号可以使用 raise 命令 给自己发送abort信号也就是6号信号。相当于代码raise(6) 或  kill(getpid(),6) 软件条件产生信号 这里可以举一个例子当管道读端不进行读取还关闭了文件描述符而写端一直写入会发生什么问题操作系统会自动终止对应写端进程通过发送信号的方式发送SIGPIPE信号。 验证 1.创建匿名管道 2.让父进程进行读取子进程进行写入 3.让父进程关闭读端 waitpid()子进程一直进行写入 4.子进程退出父进程waitpid拿到子进程的退出status。 5.提取退出信号。 SIGPIPE便是一种软件条件产生的信号除了管道中会发出SIGPIPE信号接下来我们学习其它软件产生的信号alarm 函数与SIGALRM 信号系统调用中的 alarm 函数会产生 SIGALRM  信号。接下来让我们了解一下 alarm 接口。 调用 alarm 函数可以设定一个闹钟也就是告诉内核再 seconds 秒之后给当前进程发 SIGALRM 信号该信号的默认处理动作是终止当前进程。  利用上面这个函数我们可以做一个定时器。 int count 0;void catchSig(int signum) {cout count: count endl; } int main() {// 1秒后发送消息alarm(1);signal(SIGALRM, catchSig);while (1){count;}return 0; }如何理解软件条件给进程发送信号OS先识别到某种软件条件触发或不满足。OS构建信号发送给指定的进程。 硬件异常产生信号 首先我们要知道硬件是如何产生信号的我们先写一段整数除以0的代码看一下。 void handler(int signum) {sleep(1);cout signal is : signum endl; } int main() {signal(SIGFPE, handler);int a;a/0;while (1)sleep(1);return 0; } 这段代码会不断的产生信号8但是我们把信号8捕捉了他就会不停的发送。 一.那如何理解整数除以0这个操作 1.因为计算的是CPU如果CPU计算出现错误会将错误信息放入到状态寄存器中状态寄存器中有对应的状态标记位(类比成 位图)其中会存在溢出标记位OS会自动进行计算完毕之后的检查。 2.如果OS识别到有溢出问题根据 current指针(指向当前正在运行的进程) 找到进程然后提取出 PIDO S再进行信号发送到该进程进程则会再合适的时候进行信号的处理。 3.立即找到当前 task_struct中有一个current指针当程序进行执行时current内的内容也会被加载到CPU的寄存器中。 4.所以整数除以零是一个硬件异常的问题。 二·.那一旦出现硬件异常进程一定会退出吗 不一定一般默认是退出但是如果我们不进行退出我们也不能进行任何操作因为无权访问CPU中的寄存器数据。 三.为什么会发生死循环 因为寄存器中的异常一直没有被解决所以一般我们出现除0等错误一般就直接exit()退出了。 指针越界、野指针一般被称为段错误 (11号信号SIGSEGV) 那如何理解野指针或越界问题 1.都必须通过地址找到目标位置 2.语言上的地址全部都是虚拟地址 3.将虚拟地址转化为物理地址 4.页表MMU(Memmory Manager Unit——硬件) 5.野指针越界-非法地址-MMU转化的时候一定会报错。因为MMU这个硬件其中也有寄存器注意外设也有寄存器的不只是CPU有寄存器。 结论硬件也能产生信号。所有的信号都有其来源但最终全部都是被OS被识别、解释、发送的。 信号的常见问题 为什么所有的信号产生最终都要由OS来执行因为OS是进程的管理者。 信号的处理是否是立即处理的由OS在合适的时机进行处理。 信号如果不是被立即处理那么信号是否需要暂时被进程记录下来记录在哪里需要被记录下来记录在进程PCB中对应的信号记录位图。 如何理解OS向进程发送信号本质是OS直接修改PCB中的信号位图根据信号编号修改特定的比特位(由0置1)。
http://www.sczhlp.com/news/183783/

相关文章:

  • 网络工程师 网站建设写wordpress博客程序
  • 晋城建设公司网站义乌外贸网站建设行吗
  • 手机网站吧android开发培训
  • 网站建设没有预付款网站建设之前必须 域名备案
  • 大庆工程建设公司网站沛县网站开发
  • asp.net建立网站做外贸的都有哪些网站
  • 网站的ftp怎么查汕头达濠
  • 专业做淘宝网站推广外贸网站建设及优化ppt
  • 简述网站设计的原则网站做友情链接的用途
  • 邵武网站建设张家港网站建设服务
  • Ai元人文:算力的涅槃——当“悟空之眼”照见AI决策的下一纪元
  • python 网站开发线上平台推广是做什么的
  • 广州房地产网站建设电子商务网站建设的重要行
  • 网站做360推广需要什么条件随州网站建设哪家好
  • 做网站有哪些行业wordpress 怎么传递参数 get参数
  • 早教网站设计适合做外贸的公司名
  • 淮南网站优化公司wordpress 主题制作 教程
  • 网站怎么修改好之后再上线营销做网站公司
  • 昆明软讯科技网站建设北京网站设计有名 乐云践新
  • 建设英语网站目的闸北做网站公司
  • 烟台网站seo自助网站设计平台
  • 上海智能网站建设公司塘下建设银行网站
  • 网站没有排名中小企业网络
  • 中英文的网站是怎么做的网站跳转站代码
  • 网站建设越来越难做荣耀手机价格表大全一览
  • 手机餐饮网站开发外贸网站域名被封
  • 团员注册网站深圳做网站(推荐乐云践新)
  • 珠海网站建设 旭洁合肥网站设计
  • 网站开发语言 排行榜深圳网站建设微信商城开发
  • 定制网站建设和运营企鹅媒体平台