Linux——深度解析进程信号,看这一篇就够了!

Linux——进程信号

  • 1.信号的概念
  • 2.信号的产生
    • 2.1硬件产生
    • 2.2什么是Core Dump?
    • 2.2软件产生
  • 3.信号的注册
    • 3.1非可靠信号注册
    • 3.2可靠信号注册
  • 4.信号的注销
    • 4.1非可靠信号注销
    • 4.2可靠信号注销
  • 5.信号的处理
    • 5.1 signal函数
    • 5.2 sigaction函数
  • 6.信号的阻塞

1.信号的概念

信号是一个软件中断

共有62种信号,通过kill -l查看所有信号
Linux——深度解析进程信号,看这一篇就够了!_第1张图片
其中:

  • 1~31号为非可靠信号,信号有可能会丢失
  • 34~64号为可靠信号,信号不会丢失

2.信号的产生

2.1硬件产生

  • ctrl + c :2号信号(SIGINT),导致前台进程终止
  • ctrl + z :20信号(SIGTSTP),导致前台进程暂停
  • ctrl + l :3号信号(SIGQUIT),与SIGINT类似,单会产生Core Dump(核心转储)文件

2.2什么是Core Dump?

core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,无法使用记事本打开,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象,主要用来调试。

文件的生成和大小限制?

  • linux系统more默认关闭coredump文件的生成,因为需要占用一部分系统开销。ulimit -c检查系统core
    dump功能是否开启,0为关闭

产生核心转储文件的条件?

  • 当前的操作系统当中一定不要限制coredump文件的大小 ulimit -c 1024

产生核心转储文件的情况?

  • 解引用了空指针,进程就会收到11号信号,导致进程coredump
  • 内存访问越界,一旦进程崩溃,进程就会收到11号信号,也就会理论上产生coredump文件
  • double free进程会收到6号信号,导致当前的进程退出,并产生coredump

2.2软件产生

1.,kill命令语句

kill -[信号]-[pid] 

2.kill函数

kill(pid_t pid,int signo)

向pid进程发送signo信号,成功返回0,错误返回-1

3.abort函数

void abort(void);

向pid发送6号信号,像exit函数一样,abort函数总是会成功的,所以没有返回值

3.信号的注册

1个位图+1个singqueque队列

sigset_t在taskstruct体中的存储:
Linux——深度解析进程信号,看这一篇就够了!_第2张图片
在使用sig数组不是数组来使用的,而是按照bit位来使用的,long在linux下占64个比特位,每一个信号在位图中都有一个与之对应的比特位,当与之对应的比特位为1时,表示当前进程收到了该信号

3.1非可靠信号注册

  1. 将非可靠信号对应的比特位更改为1
    Linux——深度解析进程信号,看这一篇就够了!_第3张图片

  2. 添加sigqueue节点到sigqueue队列当中,如果当队列中已经有该信号的sigqueue的节点,则不添加。

你可能感兴趣的:(linux)