信号_什么是信号_学习信号有什么意义

Posted doitjust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号_什么是信号_学习信号有什么意义相关的知识,希望对你有一定的参考价值。

什么是信号,学习信号有什么意义

第7章 信号

  • 我们这里讲的信号指的是OS提供的一种软件层面的通信进制,大家不要和电子专业的“电信号”搞混。

1. 什么是信号

  • 信号是一种通知进程某件事情发生了的一种通信机制,通过向进程发送某个信号,可以告诉进程发生了什么事情,进程收到这个信号后,就知道某事情发生了。进程可以做出相应的响应(处理),所以其实信号也是一种通信机制,目的就是用于告诉进程发生了什么事情。

  • 不过Linux所实现的信号这种通信机制,与我们后面专门将的IPC(进程间通信)所不同的是,信号属于不精确通信,信号只能告诉进程大概发生了什么事情,但是不能准确的告诉进程详细的细节信息。

  • 这就好比以前长城放狼烟一样,放狼烟就是一种信号,只能告诉你敌人来了,大概来了多少人,但是无法告诉更多详细的情报,但是如果是电话、电报的话,就属于精确通信,不经可以告诉你敌人来了,还会告诉你敌军的详细情况。

  • 是不是有了精确的IPC后,就可以将信号淘汰了呢?显然不是的,信号有自己应用场合。

  • 本章所涉及到各个API就是专门与信号相关的API

2. 学习信号的意义

  • (1)后续课程和开发会用到

  • (2)帮助我们解答一些疑惑

    • 1) 比如Ctrl+C为什么可以结束进程
    • 2) 产生指针错误是为什么进程能够自动结束,并提示产生了“segment fault”(段错误)。
    • 3)kill命令到底是怎么结束进程的。
    • 等等
  • (3)有利于知识的横向对比和理解

    • C、C++、Java的线程库有类似的信号概念,QT界面开发使有类似信号和槽的概念,如果你对本章介绍Linux的信号机制有所理解的话,你会发现其实所有的信号机制的实现,原理都是相通的。

1. 信号

1.1 什么是信号

  • 信号是一种向进程发送通知,告诉其某件事发生了的一种简单通信机制

1.2 信号的命名

  • Linux中定义了很多信号,所有的信号都是一个整数编号,不过为了好辨识,Linux系统给这些整数编号都定义了对应的宏名,宏名都是以SIG开头,比如SIGABRT。

    • SIG:signal的缩写
    • ABRT:abort的缩写
  • 宏名SIG 是对信号的描述,ABRT标识放弃的意思,向进程发送SIGABRT信号,进程会被信号异常终止。在前面我们讲过,当我们调用abort函数是,该函数就会向进程发送一个SIGABRT信号,你一看到ABRT就知道与abort函数有关系。

  • 疑问:这么多的信号,都有哪些呢?记不住怎么办?

    • 答:不用担心,后面解释。

1.3 谁会向进程发送信号

技术图片

  • 总结起来,会有三个角色会向进程发送信号。另一个进程、OS内核、硬件中断。

  • (1)另一个进程发送信号

    • 比如在命名行终端窗口通过kill命令向某个进程发送一个信号将其终止。
  • (2)内核发送信号

    • 发生了某个事件,Linux内核可能会发送该事件对应的信号给某个进程
      • 进程从管道文件读取数据,但是管道文件的读权限被关闭了,进程会被内核发送一个SIGPIPE信号,提示读管道出错了。
  • (3)地城硬件发送信号

    • 底层硬件发生了某个事件,会向进程发送对应的某个信号。
      • 比如按下Ctrl+C按键终止进程时,内核收到Ctrl+C按键后,会向正在运行的进程发送SIGINT信号,将其异常终止。

1.4 进程收到信号过后,进程会如何处理

  • 三种处理方式,分别是默认,忽略,捕获。

1.4.1 忽略

  • 忽略的意思就是,进程就到信号没有发生过。
    • 这就好比别人送了新给你,但是你忽略信的存在,那么这封信将不会对你产生任何影响。

1.4.2 捕获

  • 捕获的意思就是说,进程会调用响应的处理函数,进行响应的处理。

1.4.3 默认

  • 如果不忽略也不捕获的话,此时进程会使用系统默认的处理方式来处理信号。

以上是关于信号_什么是信号_学习信号有什么意义的主要内容,如果未能解决你的问题,请参考以下文章

自相关函数怎么理解,为什么定义中有共轭,卷积呢。定义中的卷积,共轭有什么意义?尤其是在信号处理方面

傅立叶变换的物理意义

傅立叶变换FFT中采样频率有啥意义

sign和signal的区别究竟是啥啊?

信号处理中FFT后的意义及常用处理方法

FFT的物理意义