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

邢台做网站哪家公司好上海缪斯设计公司官网

邢台做网站哪家公司好,上海缪斯设计公司官网,北京网络职业学院怎么样,长尾关键词挖掘目录 一、认识信号 1.1生活中的信号 1.2代码中的信号 1.3 后台进程操作(扩展) 二、信号概念 2.1查看信号 2.2查看各信号默认处理动作 三、信号处理 3.1默认行为(SIG_DFL) 3.2忽略行为(SIG_IGN) 3.3自定义行为(信号捕捉&#xf…

目录

一、认识信号

        1.1生活中的信号

        1.2代码中的信号

        1.3 后台进程操作(扩展)

二、信号概念

        2.1查看信号

        2.2查看各信号默认处理动作

三、信号处理

        3.1默认行为(SIG_DFL)

        3.2忽略行为(SIG_IGN)

        3.3自定义行为(信号捕捉)

四、横向了解信号


一、认识信号

        1.1生活中的信号

你在⽹上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临
时,你该怎么处理快递。也就是你能“识别快递
识别信号是内置的,进程识别信号,是内核程序员写的内置特性。
当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。那么在在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的⾏为并不是⼀定要⽴即执⾏,可以理解成“在合适的时候去取”。
信号的处理⽅法,在信号产⽣之前,已经准备好了
在收到通知,再到你拿到快递期间,是有⼀个时间窗⼝的,在这段时间,你并没有拿到快递,但是
你知道有⼀个快递已经来了。本质上是你“记住了有⼀个快递要去取
信号保存 
当你时间合适,顺利拿到快递之后,就要开始处理快递了。⽽处理快递⼀般⽅式有三种:1. 执⾏默
认动作(幸福的打开快递,使⽤商品)2. 执⾏⾃定义动作(快递是零⻝,你要送给你你的⼥朋友)
3. 忽略快递(快递拿上来之后,扔掉床头,继续开⼀把游戏)
信号处理:a.默认 b.忽略 c.⾃定义, 后续都叫做信号捕捉
快递到来的整个过程,对你来讲是异步的,你不能准确断定快递员什么时候给你打电话

        1.2代码中的信号

⽤⼾按下 Ctrl+C ,这个键盘输⼊产⽣⼀个硬件中断,被OS获取,解释成信号,发送给⽬标前台进程
前台进程因为收到信号,进⽽引起进程退出
Ctrl+C 的本质是向前台进程发送 SIGINT 2 号信号,我们证明⼀下,这⾥需要引⼊⼀
个系统调⽤函数singal
//NAME
//signal - ANSI C signal handling
//SYNOPSIS#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);//参数说明:
signum:信号编号[后⾯解释,只需要知道是数字即可]
handler:函数指针,表⽰更改信号的处理动作,当收到对应的信号,就回调执⾏handler⽅法

改变ctrl + c信号所对应的函数执行方法

#include <iostream>
#include <unistd.h>
#include<signal.h>void handler(int signum)
{std::cout << "Get a signal :" << signum << std::endl;
}int main()
{::signal(2,handler);while(true){std::cout << "I am a process, I am waiting signal!" << std::endl;sleep(1);}// while(true)// {//     std::cout << "I am a process, I am waiting signal!" << std::endl;//     sleep(1);// }
}

要注意的是,signal函数仅仅是设置了特定信号的捕捉⾏为处理⽅式,并不是直接调⽤处
理动作。如果后续特定信号没有产⽣,设置的捕捉函数永远也不会被调⽤!!
Ctrl-C 产⽣的信号只能发给前台进程。
⼀个命令后⾯加个&可以放到后台运⾏,这样 Shell不必等待进程结束就可以接受新的命令,启动新的进程。
./sig &
Shell可以同时运⾏⼀个前台进程和任意多个后台进程,只有前台进程才能接到像 Ctrl-C
这种控制键产⽣的信号。
前台进程在运⾏过程中⽤⼾随时可能按下 Ctrl-C ⽽产⽣⼀个信号,也就是说该进程的⽤
⼾空间代码执⾏到任何地⽅都有可能收到 SIGINT 信号⽽终⽌,所以信号相对于进程的控
制流程来说是异步(Asynchronous)的。

        1.3 后台进程操作(扩展)

// & 执行程序后使程序从前台转到后台,CTRL + c 无法后台杀掉进程./sig  &// fg 将后台进程移到前台fg [1]//nohup将后台文件打印操作向nohup文件中打印nohup ./sig &

二、信号概念

信号是进程之间事件异步通知的⼀种⽅式,属于软中断。

        2.1查看信号

kill -l

每个信号都有⼀个编号和⼀个宏定义名称,这些宏定义可以在signal.h中找到
数字与信号对应

        

        2.2查看各信号默认处理动作

man 7 signal

   

三、信号处理

        3.1默认行为(SIG_DFL)

#include <iostream>
#include <unistd.h>
#include<signal.h>
#include<sys/types.h>void handler(int signum)
{std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signum << std::endl;
}int main()
{::signal(SIGINT,SIG_DFL);while(true){std::cout << "I am a process, I am waiting signal!" << std::endl;sleep(1);}// while(true)// {//     std::cout << "I am a process, I am waiting signal!" << std::endl;//     sleep(1);// }
}

        3.2忽略行为(SIG_IGN)

#include <iostream>
#include <unistd.h>
#include<signal.h>
#include<sys/types.h>void handler(int signum)
{std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signum << std::endl;
}int main()
{::signal(SIGINT,SIG_IGN);while(true){std::cout << "I am a process, I am waiting signal!" << std::endl;sleep(1);}// while(true)// {//     std::cout << "I am a process, I am waiting signal!" << std::endl;//     sleep(1);// }
}

        3.3自定义行为(信号捕捉)

#include <iostream>
#include <unistd.h>
#include<signal.h>
#include<sys/types.h>void handler(int signum)
{std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signum << std::endl;exit(0);
}int main()
{::signal(SIGINT,handler);// ::signal(SIGINT,SIG_IGN);// ::signal(SIGINT,SIG_DFL);while(true){std::cout << "I am a process, I am waiting signal!" << std::endl;sleep(1);}// while(true)// {//     std::cout << "I am a process, I am waiting signal!" << std::endl;//     sleep(1);// }
}

四、横向了解信号

        以时间横向看信号分为信号产生,信号保存与信号处理。

http://www.dtcms.com/a/619140.html

相关文章:

  • 做外贸做的很好的网站属于网络营销的特点是
  • 响应式网站有什么好处策划公司活动方案
  • 怎么做网站滑动图片部分wordpress 调试
  • 第42节:自定义渲染管线:修改Three.js默认流程
  • 网站开发后端最新技术设计公司注册需要什么条件
  • AdalFlow:让大模型任务像水流一样灵活可塑
  • 网奇e游通旅游网站建设系统如何修改上传到服务器小视频做网站怎么赚钱吗
  • 达州达县网站建设网站设计与平面设计区别
  • 西安市建设网站西安模板做网站
  • 移动开发工程笔记:glide/taro与性能优化
  • nuxt做多页面网站本地wordpress环境搭建
  • Flink原理与实战(java版)#第2章 Flink的入门(第七节Flink的第一个流式计算示例和第八节本章小结)
  • 普通的宣传网站用什么做百度应用商店官网
  • SpringBoot 整合时序数据库 Apache IoTDB 实战操作详解
  • Painter AI 散布:告别“重复感”的环境贴图
  • 长沙米拓建站wordpress apache 配置
  • 安卓手机做网站服务器吗建站系统源代码
  • 建设网站服务器郑州网站建设知名公司
  • 网站与系统对接图文方案网创电商是什么
  • 海豚调度器创建租户错误的原因
  • 2025 年江西省职业院校技能大赛人工智能应用技术赛项竞赛方案(中职组)
  • 字符指针与字符串
  • 前端 css中的函数
  • 做网站维护要学些什么wordpress防止图片被采集
  • 网站建设经典教材企业官网登录
  • 摄影师个人网站模板jsp网站开发环境搭建
  • 网站推广开户硬件开发简历
  • 【Linux驱动开发】Linux SDIO 底层原理与实现细节详解
  • 安徽建设厅官方网站路由下做网站映射
  • 二进制与字符编码