Linux信号解析和心得

本文介绍了Linux中的信号机制,包括信号的定义、产生方式、种类和阻塞。信号作为进程间通信的一种方式,可通过终端按键、系统函数或软件触发。核心转储在程序异常终止时记录内存状态,有助于调试。文章还探讨了信号的阻塞流程和信号集操作,并通过示例程序进行验证。
摘要由CSDN通过智能技术生成

1. 什么是信号?

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

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

2. 信号怎么产生的?

信号一般是有以下3个方面产生:

  1. 通过终端按键产生信号
  2. 调用系统函数产生信号
  3. 软件产生的信号

1>终端按键就是我们在Linux中写程序是想要终止某个程序,就会按ctrl+c按键,还有类似ctrl+d、ctrl+\、ctrl+z等。
2>调用系统函数可以产生信号,比如
这里写图片描述

这里我们将一个死循环的进程放在后台,而我们可以使用一个kill 命令向该进程发送信号。

int kill(pid_t pid, int sig);
int raise(int sig);
//返回值:成功为0,失败为-1;

这里写图片描述

在上面的图上我们可以看到一个进程可以调用系统函数来发送信号。
3>有软件产生的信号,我们在管道的时候,有一个管道产生的信号SIGPIPE,这个就是软件信号。
还有我们的alarm函数,相当于定一个闹钟,时间到了会发送一个SIGALRM信号。

unsigned int alarm(unsigned int seconds);
//返回值:0或者是当前还剩余的秒数。

如图:
这里写图片描述

扩展:Core Dump(核心转储)
定义为:核心转储(core dump),在汉语中有时戏称为吐核,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值