【Linux】信号概述

橙色

1、信号概念

信号是 Linux进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。

产生信号的几种方式:

  • 对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号,比如ctrl + c 会给进程发送一个中断进程。
  • 硬件发生异常,硬件检测到一个错误条件并通知内核,随即再由内核发送相关信号给相关进程。
  • 运行 kill 命令或函数
  • 系统状态发生变化

使用信号的两个主要目的:

  • 让进程知道已经发生了一个特定的事情
  • 强迫进程执行它自己代码中的信号处理程序

查看系统定义的信号列表:kill -l
在这里插入图片描述
前31个为标准信号(会用到),34-64为预定义好的信号(基本用不到)

2、Linux常用信号表

在这里插入图片描述

3、信号的5种默认处理动作

查看进程的详细信息: man 7 signal

信号的5中默认处理动作:

  • Term     终止进程
  • Tgn     当前进程忽略掉这个信号
  • Core     终止进程,并生成一个Core文件
  • Stop     暂停当前进程
  • Cont     继续执行当前被暂停的进程

SIGKILL和SIGSTOP信号不能被捕捉、阻塞或者忽略,只能执行默认动作。

4、如何生成core文件

首先利用ulimit -a命令查看core file size文件是否为零,如果像下图一样为0,则通过ulimit -c 1024进行修改
在这里插入图片描述

修改后结果如图:
在这里插入图片描述

core.c文件内容如下:

#include <stdio.h>
#include <string.h>

int main() {

    char buf[100];

    strcpy(buf, "hello");

    return 0;
}

在这里插入图片描述

在上图中通过gdb开始调试a后,直接run,就能显示错误
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值