信号(一)---信号的概念

  信号是进程间可以用来相互通信的一种低级方法,是Linux系统中非常重要的内容。每个信号都有一个信号名,信号名的本质就是一个整型值,所有的信号名对应的信号值都定义在头文件<signal.h>中或者可以通过 kill 命令加上 -l 选项来查看。Linux系统中支持31种不同的信号,编号从 1 到 31 (信号编号为0有特殊意义,Linux中称为空信号),每种信号都有其不同的意义,如下图所示

注意:在使用信号的时候尽量使用信号名,而不要使用信号编号,这是因为有些信号在不同的系统中的编号可能是不同的

===============================================================

当某一个进程收到一个信号时,进程对于信号的处理有三种动作:

  • 忽略该信号
  • 执行默认动作,下图为默认动作的具体类型(注意,默认动作的 Ign 和忽略信号虽然处理好像是一样的,但是在不同的层次上),通过 man 7 signal 这个命令可以查看各个信号的默认动作

  • 捕捉该信号

注意:

  有两个信号比较特殊:SIGKILL 和 SIGSTOP 信号。对于这两个信号,进程收到后既不能忽略这两种信号,也不能捕捉这两种信号,只能执行其默认动作(终止进程)。之所以对于这两种信号采用特殊的方法,是为了保证 root 用户始终能够终止一个进程,如果一个进程能够忽略所有的信号,那么将无法通过信号的方法来杀死该进程。

几个常用的信号:

SIGINT:通过按下 ctrl+c 来产生

SIGTSTP:通过按下 ctrl+z 来产生

SIGQUIT:通过按下 ctrl+\ 来产生

SIGTERM:通过命令 kill 默认产生

SIGABRT:调用abort函数来产生

SIGALRM:调用alarm函数来产生

SIGCHLD:子进程终止或者暂停时,内核发送给父进程

时间: 2024-10-06 08:58:44

信号(一)---信号的概念的相关文章

一、进程与信号之信号的概念

信号:进程与进程之间通讯机制 信号是软件中断 信号是异步事件 信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等 kill -l 查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队 32-64实时信号 进程处理信号: 忽略信号 SIGKILL和SIGSTOP永远不能被忽略 忽略硬件异常 进程启动时SIGUSER1和SIGUSER2两个信号被忽略 执行默认操作 每个信号都有默认动作,大部分信号动作是终止信号 捕获信

信号集 / 信号掩码(阻塞信号传递)

[摘自<Linux/Unix系统编程手册>] 信号集 sigemptyset() 函数初始化一个未包含任何成员的信号集.sigfillset() 函数则初始化一个信号集,使其包含所有信号(包括所有实时信号). #include <signal.h> int sigemptyset(sigset_t* set); int sigfillset(sigset_t* set); Both return 0 on success, or -1 on error 必须使用 sigemptys

Linux C 程序 信号及信号的处理(19)

信号及信号的处理 1.Linux信号的介绍  信号是一种软件中断.Linux系统中根据POSIX标准扩展的信号机制.  1.信号来源      1.硬件方式           1.当用户按下某个键,产生信号,如crtl+c          2.硬件异常产生信号,除数为0,无效的存储访问等      2.软件方式          1.用户调用kill命令向进程发送任意信号          2.进程调用kill或sigqueue函数发送信号          3.检测某种软件条件已经具备发出

后台进程读写终端的限制,SIGTTIN 信号, SIGTTOU 信号, tostop 属性

Processes in the foreground job of a controlling terminal have unrestricted access to that terminal; background proesses do not. This section describes in more detail what happens when a process in a background job tries to access its controlling ter

七十三:flask信号之信号机制和使用场景

若安装flask是未默认安装blinker,则pip install blinker 使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号 1.定义信号:定义信号需要使用到blinker.Namespace来创建一个命名空间 from blinker import Namespace name_space = Namespace() login_signal = name_space.signal('login') # 为了解决防止多人开发的时候,信号名字冲突的问题 2.

连续时间基本信号——奇异信号

定义: 1. 单位阶跃信号 2. 单位冲激信号 3. 单位斜坡信号 4. 单位冲激偶信号 四种奇异信号之间的关系 原文地址:https://www.cnblogs.com/wlyperfect/p/12510078.html

LINUX 信号概念详解

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 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

UNIX高级环境编程(13)信号 - 概念、signal函数、可重入函数

信号就是软中断. 信号提供了异步处理事件的一种方式.例如,用户在终端按下结束进程键,使一个进程提前终止. ? 1 信号的概念 每一个信号都有一个名字,它们的名字都以SIG打头.例如,每当进程调用了abort函数时,都会产生一个SIGABRT信号. 每一个信号对应一个正整数,定义在头文件<signal.h>中. 没有信号对应整数0,kill函数使用信号编号0表示一种特殊情况,所以信号编号0又叫做空信号(null signal). 下面的各种情况会产生一个信号: 当用户在终端按下特定的键时,会产生

[学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践

1基本概念 中断 q  中断是系统对于异步事件的响应 q  中断信号 q  中断源 q  现场信息 q  中断处理程序 q  中断向量表 异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序 生活中的中断和计算机系统中的中断 1)  无中断生活场景 张三看书,厨房烧水 2)有中断的生活场景 张三看书,设置闹钟,厨房烧水. 闹钟发出中断信号,张三把书合好(第20页),去厨房把开水事情处理好,张三重新打开20页进行阅读. 3)计算机系统的中断场景 中断源发出中断信号,CPU判断