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

设计比较有特色的网站福建省建设工程职业注册网站

设计比较有特色的网站,福建省建设工程职业注册网站,简单的做网站软件有啥,网页三剑客的网页制作软件是文章目录 #x1f4dd;信号快速认识#x1f4f6;⽣活⻆度的信号#x1f4f6; 技术应⽤⻆度的信号#x1f309; 前台进程#xff08;键盘#xff09;#x1f309;⼀个系统函数 #x1f4f6;信号概念#x1f4f6;查看信号 #x1f320; 信号处理#x1f309; 忽略此信… 文章目录 信号快速认识⽣活⻆度的信号 技术应⽤⻆度的信号 前台进程键盘⼀个系统函数 信号概念查看信号 信号处理 忽略此信号 执⾏该信号的默认处理动作。 切换状态函数 总结 信号快速认识 ⽣活⻆度的信号 你在⽹上买了很多件商品再等待不同商品快递的到来。但即便快递没有到来你也知道快递来临时你该怎么处理快递。也就是你能“识别快递”当快递员到了你楼下你也收到快递到来的通知但是你正在打游戏需5min之后才能去取快递。那么在在这5min之内你并没有下去去取快递但是你是知道有快递到来了。也就是取快递的⾏为并不是⼀定要⽴即执⾏可以理解成“在合适的时候去取”。在收到通知再到你拿到快递期间是有⼀个时间窗⼝的在这段时间你并没有拿到快递但是你知道有⼀个快递已经来了。本质上是你“记住了有⼀个快递要去取”当你时间合适顺利拿到快递之后就要开始处理快递了。⽽处理快递⼀般⽅式有三种1.执⾏默认动作幸福的打开快递使⽤商品2.执⾏⾃定义动作快递是零⻝你要送给你你的⼥朋友 忽略快递快递拿上来之后扔掉床头继续开⼀把游戏 快递到来的整个过程对你来讲是异步的你不能准确断定快递员什么时候给你打电话 基本结论 你怎么能识别信号呢识别信号是内置的进程识别信号是内核程序员写的内置特性。信号产⽣之后你知道怎么处理吗知道。如果信号没有产⽣你知道怎么处理信号吗知道。所以信号的处理⽅法在信号产⽣之前已经准备好了。处理信号⽴即处理吗我可能正在做优先级更⾼的事情不会⽴即处理什么时候合适的时候。信号到来|信号保存 |信号处理怎么进⾏信号处理啊a.默认b.忽略c.⾃定义后续都叫做信号捕捉。 技术应⽤⻆度的信号 前台进程键盘 样例 sig.cc: #include iostream #include unistd.hint main() {while(true){std::cout I am a process, I am wiat signal! std::endl;sleep(1);}return 0; }Makefile: BINsig OBJS$(SRCS:.cc.o) SRCS$(shell ls *.cc) CCg$(BIN):$(OBJS)$(CC) -o $ $^ -stdc11%.o:%.cc$(CC) -c $ -stdc11.PHONY:clean clean:rm -f $(BIN) $(OBJS)⽤⼾输⼊命令,在Shell下启动⼀个前台进程 ⽤⼾按下程CtrlC ,这个键盘输⼊产⽣⼀个硬件中断被OS获取解释成信号发送给⽬标前台进 前台进程因为收到信号进⽽引起进程退出 ⼀个系统函数 指令 man signal而其实ctrlC的本质是向前台进程发送|SIGINT|即2号信号我们证明一下这里需要引入一个系统调用函数 NAMEsignal - ANSI C signal handlingSYNOPSIS#include signal.htypedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);参数说明 signum信号编号[后⾯解释只需要知道是数字即可] handler函数指针表⽰更改信号的处理动作当收到对应的信号就回调执⾏handler⽅法 代码 #include iostream #include unistd.h #include signal.hvoid handler(int signumber) {std::cout我是getpid() ,我获得一个信号 signumber std::endl; }int main() {std::cout我是进程: getpid() std::endl;signal(SIGINT/*2*/, handler);while(true){std::coutI am a process, I am waiting signal! std::endl;sleep(1);}return 0; }思考: 这⾥进程为什么不退出这个例⼦能说明哪些问题信号处理是⾃⼰处理请将⽣活例⼦和Ctrl-C 信号处理过程相结合解释⼀下信号处理过程进程就是你 操作系统就是快递员信号就是快递发信号的过程就类似给你打电 注意 要注意的是signal函数仅仅是设置了特定信号的捕捉⾏为处理⽅式并不是直接调⽤处理动作。如果后续特定信号没有产⽣设置的捕捉函数永远也不会被调⽤Ctrl-C 产⽣的信号只能发给前台进程。⼀个命令后⾯加个可以放到后台运⾏,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。Shell可以同时运⾏⼀个前台进程和任意多个后台进程,只有前台进程才能接到像Ctrl-C这种控制键产⽣的信号。前台进程在运⾏过程中⽤⼾随时可能按下Ctrl-C⽽产⽣⼀个信号,也就是说该进程的⽤⼾空间代码执⾏到任何地⽅都有可能收到SIGINT 信号⽽终⽌,所以信号相对于进程的控制流程来说是异步(Asynchronous)的。可以渗透和nohup 信号概念 信号是进程之间事件异步通知的⼀种⽅式属于软中断。 查看信号 每个信号都有⼀个编号和⼀个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义 #define SIGINT 2编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各⾃在什么条件下产⽣,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal信号处理 (sigaction 函数稍后详细介绍),可选的处理动作有以下三种: 忽略此信号 #include iostream #include unistd.h #include signal.hvoid handler(int signumber) {std::cout我是getpid() ,我获得一个信号 signumber std::endl; }int main() {std::cout我是进程: getpid() std::endl;signal(SIGINT/*2*/, SIG_IGN);// 设置忽略信号的宏while(true){std::coutI am a process, I am waiting signal! std::endl;sleep(1);}return 0; }执⾏该信号的默认处理动作。 default默认行为SIG_DFL #include iostream #include unistd.h #include signal.hvoid handler(int signumber) {std::cout我是getpid() ,我获得一个信号 signumber std::endl; }int main() {std::cout我是进程: getpid() std::endl;// signal(SIGINT/*2*/, SIG_IGN);// 设置忽略信号的宏signal(SIGINT/*2*/, SIG_DFL);// 输⼊ctrlc,进程退出就是默认动作while(true){std::coutI am a process, I am waiting signal! std::endl;sleep(1);}return 0; }切换状态函数 其实这里就是转到用户自定义的handler函数 提供⼀个信号处理函数,要求内核在处理该信号时切换到⽤⼾态执⾏这个处理函数,这种⽅式称为⾃定义捕捉(Catch)⼀个信号。 #include signal.h #include stdio.h #include unistd.h void signal_handler(int signum) { // 自定义的信号处理函数 printf(Caught signal %d\n, signum); // 在这里执行需要在用户态下运行的代码 // ... } int main() { // 注册信号处理函数 signal(SIGINT, signal_handler); printf(Press CtrlC to send SIGINT signal...\n); while (1) { // 等待信号到来 pause(); } return 0; }注意看源码 /* Fake signal functions. */#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ #define SIG_DFL ((__sighandler_t) 0) /* Default action. */ #define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ /* Type of a signal handler. */ typedef void (*__sighandler_t) (int);让我们来逐一分析: #define SIG_ERR ((__sighandler_t) -1): 这个宏定义了 SIG_ERR它被赋值为 -1类型为 __sighandler_t。这通常用作 signal() 函数的返回值,表示发生错误。 #define SIG_DFL ((__sighandler_t) 0): 这个宏定义了 SIG_DFL它被赋值为 0类型为 __sighandler_t。这用于指定使用默认的信号处理函数。 #define SIG_IGN ((__sighandler_t) 1): 这个宏定义了 SIG_IGN它被赋值为 1类型为 __sighandler_t。这用于指定忽略该信号。 其实SIG_DFL和SIG_IGN就是把0,1强转为函数指针类型 总结
http://www.lakalapos1.cn/news/18853/

相关文章:

  • 网站建设专家北京注安简单的编程代码
  • 大同市建设工程招标投标网站做门窗投标网站
  • 顺企网网站建设佛山网站设计中心
  • 专业网站制作公司采用哪些技术制作网站?建设工程造价管理协会网站
  • 做网站加模块h5商城
  • 外贸网站seo有哪些公司抄袭wordpress主题
  • 公司网站域名备案对网站名称有要求或界定吗网站建设维护面试
  • 网站建设制作设计公司哪家好网站制作把图片做背景
  • 前后端分离实现网站开发个人网站欣赏的网站
  • 个人网站模板制作教程多城市网站开发
  • 如何创建一个个人网站简答题商丘软件开发
  • 成都网站建设公司司wordpress如何配置ssl
  • 网站推广的方式免费制作封面的网站
  • 济南建站推荐企汇优见效付款建立网站的流程多少钱
  • 提供视频下载的网站企业网站如何优化
  • 国内最大的c2c网站是编程培训机构哪里好
  • 网站短链接怎么做的网站后台源码
  • 网站开发和ipv6开发直播app多少钱
  • 上海好的高端网站建设access数据库创建网站
  • 免费网站建站软件美工网站做兼职
  • 网站建设后运维合同郑州网站推广地址
  • 怀化二手车网站四川住房城乡建设厅官网
  • 聊城网站建设电话wordpress刷关键词
  • 装修公司网站用的织梦自己在线制作logo免费设计软件
  • 投资网站网站源码搜狐一开始把网站当做什么来做
  • 南通网站设计专家php快速建站工具
  • 查询网站是否被收录wordpress 文章分页省略号
  • php做视频分享网站糖粉怎么自己制作
  • 怎样让百度收录自己的网站上海网页设计
  • 怎样建设美食网站做哪种网站赚钱