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

国内最大ae模板下载网站太原百度快速优化

国内最大ae模板下载网站,太原百度快速优化,wordpress主页出现副标题,石家庄房产信息网站在 Linux 系统中,信号(Signals) 是一种进程间通信(IPC)机制,用于通知进程发生了某种事件或请求进程执行特定操作。 你怎么能识别信号呢?识别信号是内置的,进程识别信号,是…

在 Linux 系统中,信号(Signals) 是一种进程间通信(IPC)机制,用于通知进程发生了某种事件或请求进程执行特定操作。

  • 你怎么能识别信号呢?识别信号是内置的,进程识别信号,是内核程序员写的内置特性。
  • 信号产⽣之后,进程知道怎么处理吗?知道。如果信号没有产生,你知道怎么处理信号吗? 知道。所以,信号的处理方法,在信号产⽣之前,已经准备好了。
  • 处理信号,立即处理吗?进程可能正在做优先级更高的事情,可能不会立即处理?什么时候?合适的时候。
  • 信号到来 | 信号保存  |  信号处理
  • 怎么进行信号处理啊?a.默认行为 b.忽略信号 c.⾃定义行为, 后续都叫做信号捕捉。

前台进程和后台进程

./precess  在前台启动的前台进程                  关闭方法:ctrl+c     杀死前台进程                                   

./process &  在后台启动的后台进程

两种关闭方法: 1.再启动一个窗口 ,查询process的pid ,使用kill -9 pid杀死进程process

                        2.首先启动时使用  nohup ./process &   是将process的输出写在在nohup.out文件中,但也是后台启动

之后使用 fg 1                           (1 是process的作业号)是将process改为前台进程 

最后使用ctrl +c

上面的ctrl+c 实际上是OS发送2号信号SIGINT给进程process ,2号信号是终止进程

ctrl+\ 是发送3号信号SIGQUIT ,也是终止进程

查看信号

kill -l  //查看linux中的常见信号

1号信号到32号信号都是普通信号(我们要学的) 

查看信号的具体作用

man 7 signal    //查看信号手册

其中Core和Term都是退出

信号捕捉和更改信号的处理动作

信号也可以被捕捉,使用系统调用signal 

signal只需要设置一次 ,但凡有对应的信号输入 就会被捕捉到.

捕捉到对应信号后 , 会执行第二个参数的方法,相当于改变了原先信号的执行方法

31个信号中 ,有几个信号无法被捕捉 如:9号信号

NAMEsignal - ANSI C signal handlingSYNOPSIS#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);参数说明:signum:信号编号handler:函数指针,表⽰更改信号的处理动作,当收到对应的信号,就回调执⾏handler⽅法

        signal函数仅仅是设置了特定信号的捕捉行为处理方式,并不是直接调用处理动作。如果后续特定信号没有产生,设置的捕捉函数永远也不会被调⽤!!

        前台进程在运⾏过程中⽤⼾随时可能按下 Ctrl-C ⽽产⽣⼀个信号,也就是说该进程的⽤ ⼾空间代码执⾏到任何地⽅都有可能收到 SIGINT 信号⽽终⽌,所以信号相对于进程的控 制流程来说是异步(Asynchronous)的。

使用信号捕捉,验证上面ctrl+c  OS是发送的信号是2号信号

#include <iostream>
#include <unistd.h>
#include <signal.h>void handler(int signum)
{std::cout << "我是" << getpid() << "捕捉到信号:" << signum << std::endl;
}int main()
{::signal(2,handler);     //signal设置一次即可while (true){std::cout << "hello linux signal" << std::endl;sleep(1);}return 0;
}

信号的发送和接受

  • 一切信号都是由OS发送给进程    因为OS是进程的唯一管理者
  • 信号的接受方都是进程
  • 常见信号有31个 ,进程的PCB中有一个位图,进程收到n号信号就将第n位位图由0置1 ,且进程还有一个信号函数指针数组,   
  • 两者对应关系: 第n信号的执行方法 = 信号函数指针数组[n-1]

信号的产生

1.键盘输入产生信号

例如:ctrl+c 就是产生2号信号 

上面知道了 ,OS发送信号给进程

问题: 但是OS怎么知道键盘输入数据了?  硬件中断

        硬件中断(Hardware Interrupt) 是由硬件设备触发、通过硬件电路实现的机制,但其处理过程需要软件(操作系统内核)配合

        硬件中断: 键盘被按下后 ,键盘发送了硬件中断给CPU ,CPU收到后会通知OS向键盘拷贝键盘数据

2.系统指令产生信号

kill -9 pid   //产生了9号信号

3.系统调用产生信号

能发信号的系统调用  kill raise abort

kill不仅仅是指令 ,也是系统调用

raise 给调用此系统调用的进程发信号   相当于 kill (getpid() , signo)

abort 给进程发送6号信号  相当于  kill(getpid() ,6)

abort() 函数会向当前调用进程发送 SIGABRT 信号(6号信号),默认行为是终止进程并生成核心转储(core dump)

4.软件条件产生信号

eg: 管道读端关闭 ,就产生13号信号 ,由OS发送给写端进程,杀死写端进程

eg: alarm 闹钟时间到了 ,OS发送14号进程给调用alarm的程序

  alarm() 是 Linux/Unix 系统中的一个系统调用,用于设置一个定时器,在指定的秒数后向当前进程发送 SIGALRM(14号信号)。默认情况下,SIGALRM 会终止进程,但可以通过信号处理函数自定义行为。

返回值

  • 返回之前定时器的剩余时间 ,响了返回0,没响返回剩余几秒

  • alarm(0)是取消闹钟 ,返回值是剩余几秒

#include <iostream>
#include <unistd.h>
#include <signal.h>int number = 0;void die(int signumber)
{printf("get a sig : %d, count : %d\n", signumber, number);exit(0);
}int main()
{// 统计我的服务器1S可以将计数器累加多少!alarm(1); // 我自己,会在1S之后收到一个SIGALRM信号signal(SIGALRM, die);while (true){number++;}}

执行结果

取消闹钟 alarm(0)

#include <iostream>
#include <unistd.h>
#include <signal.h>int number = 0;void die(int signumber)
{printf("get a sig : %d, count : %d\n", signumber, number);exit(0);
}int main()
{// 统计我的服务器1S可以将计数器累加多少!alarm(10); // 我自己,会在10S之后收到一个SIGALRM信号sleep(4);int n = alarm(0); // 0:取消闹钟std::cout << "n : " << n << std::endl;signal(SIGALRM, die);while (true){number++;}}

这里已经取消闹钟,进程不会收到14号信号,会一直执行

5.异常产生信号

野指针访问   /=0操作  都会引发信号的产生

#include <iostream>
#include <unistd.h>
#include <signal.h>
#include<vector>
#include<functional>void handler(int signum)
{std::cout << "我是" << getpid() << "捕捉到信号:" << signum << std::endl;
}int main()
{signal(8 ,handler);int a =10;a/= 0;while(true);
}

这个执行结果为什么是死循环?

上面的代码,将8号信号捕捉了,自定义的行为也没有退出进程 ,进程还在继续 ,为什么一直打印呢?

因为有众多其他进程等着执行 ,OS把这个进程切回来一看 ,还是溢出就还发送8号信号,一直如此


文章转载自:

http://rzui9Dek.Lwtfr.cn
http://Q0W8jddN.Lwtfr.cn
http://3WlTI7oe.Lwtfr.cn
http://oPh7NIJN.Lwtfr.cn
http://OiDb6n4T.Lwtfr.cn
http://WKQVQcPu.Lwtfr.cn
http://HRgPjaZB.Lwtfr.cn
http://HrXVSpaw.Lwtfr.cn
http://4CUMLKD5.Lwtfr.cn
http://oSd6hlXc.Lwtfr.cn
http://hdbXXgd7.Lwtfr.cn
http://7u4X0tuS.Lwtfr.cn
http://58fNc7GH.Lwtfr.cn
http://pgSc66Lx.Lwtfr.cn
http://srHq216A.Lwtfr.cn
http://E2vreR68.Lwtfr.cn
http://wbXSNHkx.Lwtfr.cn
http://0YcRRBWa.Lwtfr.cn
http://0vi9R9F7.Lwtfr.cn
http://VZd0Iofu.Lwtfr.cn
http://hvSmTWx0.Lwtfr.cn
http://i8y8J45M.Lwtfr.cn
http://iJore7m9.Lwtfr.cn
http://9kgOlayn.Lwtfr.cn
http://vHuvfPck.Lwtfr.cn
http://79V1ffQH.Lwtfr.cn
http://NQ1hbEZt.Lwtfr.cn
http://jTibHhwP.Lwtfr.cn
http://QNSEa8l2.Lwtfr.cn
http://uTyShGCq.Lwtfr.cn
http://www.dtcms.com/wzjs/766764.html

相关文章:

  • 动态设计参考网站apache配置wordpress
  • 自己做网站需要哪些软件自己建设网站需要些什么
  • 苏州高端网站设计定制免费正能量不良网站推荐
  • 苏州怎么做网站四川网站建设报价
  • 建行手机网站wordpress安装出现乱码
  • wordpress 添加评论等级廊坊视频优化展现
  • 网站后台有哪些模块什么是网站空间
  • wordpress采集微信文章内容西安seo霸屏
  • 做网站到底怎么赚钱北京asp网站设计制作
  • 怎么选择扬中网站建设百度云分享tp响应式网站开发
  • 北京网站优化多少钱东莞营销型网站外包
  • h5 php mysql网站开发佛山市官网网站建设公司
  • 网站静态化 好处什么是网络设计原则
  • 建完网站怎样维护嘉兴网站排名优化报价
  • 广州营销网站制作我看别人做系统就直接网站下载
  • 网站实例南昌网站建设方案服务
  • 成都市 建设领域信用系统网站手机上开发游戏
  • 岗巴网站建设有微重庆网站吗
  • 怎么做网站10步骤上海网站建设哪家好
  • 网站建设mfdos一级造价工程师含金量
  • 营销型企业网站模板重庆装修网站建设
  • 一个虚拟主机可以做两个网站吧wordpress程序分析
  • 如何知道一个网站是用什么做的做公益选哪个网站好
  • 导航网站如何被百度收录wordpress 插件评论区
  • 创新创业项目计划书ppt无排名优化
  • 无锡中小企业网站建设住房和城乡建设部网站共有产权
  • 网站开发子孙账号完全自建网站
  • 网站数据流程怎么查域名服务商
  • 济南正宗网站建设报价免费下载百度软件
  • 深圳模板网站制作网络推广方案案例