什么是信号?

  在计算机科学中,信号(英语:Signals)是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。

简单来说,信号就是一种Linux环境下进程通讯的一种机制。

在linux中各种信号以及其编号和名称可以使用命令$ kill -l查看:

1) SIGHUP         2) SIGINT         3) SIGQUIT        4) SIGILL         5) SIGTRAP
6) SIGABRT        7) SIGBUS         8) SIGFPE         9) SIGKILL       10) SIGUSR1
11) SIGSEGV      12) SIGUSR2       13) SIGPIPE       14) SIGALRM       15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD       18) SIGCONT       19) SIGSTOP       20) SIGTSTP
21) SIGTTIN      22) SIGTTOU       23) SIGURG        24) SIGXCPU       25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF       28) SIGWINCH      29) SIGIO         30) SIGPWR
31) SIGSYS       34) SIGRTMIN      35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4   39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9   44) SIGRTMIN+10   45) SIGRTMIN+11   46) SIGRTMIN+12   47) SIGRTMIN+13
48) SIGRTMIN+14  49) SIGRTMIN+15   50) SIGRTMAX-14   51) SIGRTMAX-13   52) SIGRTMAX-12
53) SIGRTMAX-11  54) SIGRTMAX-10   55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6   59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1   64) SIGRTMAX

  常用的是前32个,即标准(Standard)信号,但是对于驱动开发的同学往往会使用后面32个,后32为实时(Real-time)信号。

  也可以使用$ man 7 signal查看详细的信号介绍:

man 7 signalTerm    Default action is to terminate the process.
Ign     Default action is to ignore the signal.
Core    Default action is to terminate the process and dump core (see core(5)).
Stop    Default action is to stop the process.
Cont    Default action is to continue the process if it is currently stopped.Signal     Value      Action          Comment
SIGHUP       1      Term Hangup       detected on controlling terminalor death of controlling process
SIGINT       2         Term           Interrupt from keyboard
SIGQUIT      3         Core           Quit from keyboard
SIGILL       4         Core           Illegal Instruction
SIGABRT      6         Core           Abort signal from abort(3)
SIGFPE       8         Core           Floating point exception
SIGKILL      9         Term           Kill signal
SIGSEGV      11        Core           Invalid memory reference
SIGPIPE      13        Term           Broken pipe: write to pipe with noreaders
SIGALRM      14        Term           Timer signal from alarm(2)
SIGTERM      15        Term           Termination signal
SIGUSR1    30,10,16    Term           User-defined signal 1
SIGUSR2    31,12,17    Term           User-defined signal 2
SIGCHLD    20,17,18    Ign            Child stopped or terminated
SIGCONT    19,18,25    Cont           Continue if stopped
SIGSTOP    17,19,23    Stop           Stop process
SIGTSTP    18,20,24    Stop           Stop typed at tty
SIGTTIN    21,21,26    Stop           tty input for background process
SIGTTOU    22,22,27    Stop           tty output for background processThe signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

  表中第一列是各信号的宏定义名称,第二列是各信号的编号,第三列是默认处理动作:

Term表示终止当前进程.
Core表示终止当前进程并且Core Dump(Core Dump 用于gdb调试).
Ign表示忽略该信号.
Stop表示停止当前进程.
Cont表示继续执行先前停止的进程.

表中最后一列是简要介绍,说明什么条件下产生该信号。


如何向进程发送信号?

常见的发送信号的方式有四种:

1) 终端特殊按键:
  ctl+c  SIGINT
  ctl+z  SIGTSTP
  ctl+\  SIGQUIT

2) kill命令

3) kill函数:
  int kill(pid_t pid, int sig)
    pid > 0
      sig发送给ID为pid的进程
    pid == 0
      sig发送给与发送进程同组的所有进程
     pid < 0
      sig发送给组ID为|-pid|的进程,并且发送进程具有向其发送信号的权限
    pid == -1
      sig发送给发送进程有权限向他们发送信号的系统上的所有进程

4)某种软件条件已发生,例如定时器alarm到时(注:每个进程只有一个定时器):
   unsigned int alarm(unsigned int seconds)

举例:

/* kill函数的使用 */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>int main(int argc, char *argv[])
{if(argc < 3){printf("./app signal pid\n");exit(-1);}if(kill((pid_t)atoi(argv[2]),atoi(argv[1])) < 0){perror("kill");exit(1);}return 0;
}/* alarm的使用 */
#include <unistd.h>
#include <stdio.h>
int main(void)
{int counter;alarm(1);for(counter=0; 1; counter++)printf("counter=%d ", counter);return 0;
}

(二十九)信号——概念相关推荐

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  2. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  3. 蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机

    蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机 题目如下: 已完成 应用的内容: EEPROM. 定时器.数码管 led灯,独立按键 DA电压输出 超声波测距 /* ------------ ...

  4. BetaFlight模块设计之二十九:滤波模块分析

    BetaFlight模块设计之二十九:滤波模块分析 滤波模块 滤波类型 1. slewFilter 2. simpleLowpassFilter 3. laggedMovingAverage 4. p ...

  5. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  6. Bootstrap入门(二十九)JS插件6:弹出框

    Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...

  7. FreeSql (二十九)Lambda 表达式

    FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解数据库函数的情况下编写代码.这是 FreeSql 非常特色的功能之一,深入细化函数解析尽量做到满意,所支持的类型基本都可以使用对应的表达 ...

  8. 【零基础学Java】—final关键字与四种用法(二十九)

    [零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...

  9. JavaScript学习(二十九)—JS常用的事件

    JavaScript学习(二十九)-JS常用的事件 一.页面相关事件 onload事件:当页面中所有的标签都加载完成后厨房该事件,格式:window.onload <body><sc ...

  10. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

最新文章

  1. Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
  2. Android HAL模块的加载过程
  3. 说出你的个人知识问题!
  4. 数据与程序分离——程序中那些表的事儿
  5. 数据库之Oracle(二)
  6. 关于swift5以上的SnapKit框架的入门教程使用
  7. altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...
  8. java8 内部类_Java8基础知识(五)内部类
  9. editplus 快捷键及设置tab空白符及删除空格空行
  10. qt4.7.0 交叉编译环境搭建经验总结
  11. 西门子PLC中各个组织块OB作用
  12. CSS样式(内联、内部、外部)
  13. Linux命令大全(一)(详解)系统管理、系统设置及文档编辑
  14. 数据分析师 2020-8-09笔试题目 有感
  15. 【二】Centos 7.6下载与安装
  16. reverse()的使用
  17. Unity进阶 - 动画系统 - 给人物角色制作动画
  18. MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
  19. 云服务器建站教程专栏汇总
  20. 判断素数(java语言编写)

热门文章

  1. 纳雷科技周坤明:毫米波雷达的开发与应用技术
  2. 幽门螺旋杆菌引发了胃炎,记录一下诊断的过程
  3. 清华副校长薛其坤将任南科大校长!曾考研3次读博7年,50岁时发诺奖级论文,获100万美金奖金
  4. 部署nova控制节点与计算节点
  5. 学到中年的python学习笔记12--进程和线程
  6. java中波折号的含义_波折号的基本用法.doc
  7. 率土之滨显示没选择服务器,率土之滨 这些实用攻略还不知道你就OUT啦
  8. 从不玩游戏到将游戏作为工作的一点感悟
  9. 嘲讽了那么多删库跑路的人和事以后,我终于也干了一次删库的事
  10. 怎样在c语言程序里面添加图片,C语言 使用图形库(Easy X)绘制界面及程序添加音乐...