(二十九)信号——概念
什么是信号?
在计算机科学中,信号(英语: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+\ SIGQUIT2) 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;
}
(二十九)信号——概念相关推荐
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块
实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...
- SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- 蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机
蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机 题目如下: 已完成 应用的内容: EEPROM. 定时器.数码管 led灯,独立按键 DA电压输出 超声波测距 /* ------------ ...
- BetaFlight模块设计之二十九:滤波模块分析
BetaFlight模块设计之二十九:滤波模块分析 滤波模块 滤波类型 1. slewFilter 2. simpleLowpassFilter 3. laggedMovingAverage 4. p ...
- 2021年大数据Hadoop(二十九):关于YARN常用参数设置
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...
- Bootstrap入门(二十九)JS插件6:弹出框
Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...
- FreeSql (二十九)Lambda 表达式
FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解数据库函数的情况下编写代码.这是 FreeSql 非常特色的功能之一,深入细化函数解析尽量做到满意,所支持的类型基本都可以使用对应的表达 ...
- 【零基础学Java】—final关键字与四种用法(二十九)
[零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...
- JavaScript学习(二十九)—JS常用的事件
JavaScript学习(二十九)-JS常用的事件 一.页面相关事件 onload事件:当页面中所有的标签都加载完成后厨房该事件,格式:window.onload <body><sc ...
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
最新文章
- Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
- Android HAL模块的加载过程
- 说出你的个人知识问题!
- 数据与程序分离——程序中那些表的事儿
- 数据库之Oracle(二)
- 关于swift5以上的SnapKit框架的入门教程使用
- altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...
- java8 内部类_Java8基础知识(五)内部类
- editplus 快捷键及设置tab空白符及删除空格空行
- qt4.7.0 交叉编译环境搭建经验总结
- 西门子PLC中各个组织块OB作用
- CSS样式(内联、内部、外部)
- Linux命令大全(一)(详解)系统管理、系统设置及文档编辑
- 数据分析师 2020-8-09笔试题目 有感
- 【二】Centos 7.6下载与安装
- reverse()的使用
- Unity进阶 - 动画系统 - 给人物角色制作动画
- MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
- 云服务器建站教程专栏汇总
- 判断素数(java语言编写)
热门文章
- 纳雷科技周坤明:毫米波雷达的开发与应用技术
- 幽门螺旋杆菌引发了胃炎,记录一下诊断的过程
- 清华副校长薛其坤将任南科大校长!曾考研3次读博7年,50岁时发诺奖级论文,获100万美金奖金
- 部署nova控制节点与计算节点
- 学到中年的python学习笔记12--进程和线程
- java中波折号的含义_波折号的基本用法.doc
- 率土之滨显示没选择服务器,率土之滨 这些实用攻略还不知道你就OUT啦
- 从不玩游戏到将游戏作为工作的一点感悟
- 嘲讽了那么多删库跑路的人和事以后,我终于也干了一次删库的事
- 怎样在c语言程序里面添加图片,C语言 使用图形库(Easy X)绘制界面及程序添加音乐...