Linux系统的信号

本文深入讲解了Linux系统中信号的概念,包括信号的生成与捕获,如何使用kill函数发送信号,以及程序对信号的三种响应方式:默认、忽略和自定义。通过具体示例演示了信号在进程间的通信作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)信号概念

信号可以完成进程间通信,但是它的传输只能是一个信号值。

信号是Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些行动。我们用术语生成来表示一个信号的产生,使用术语捕获表示接收到一个信号。

信号是由于某些错误条件而生成的,如内存段冲突、非法指令等等。

信号的名称在头文件signal.h中定义,它们都以SIG开头,部分信号如下:

(2)发送信号

我们发送信号使用kill函数,它的定义如下

kill把参数sig给定的信号发送给参数pid给出的进程号所指定的进程,如果成功则返回0,如果失败则返回-1。

我们演示一遍:

首先是代表一个正在执行的进程for.c:

接下来是发送信号的mykill.c

 我们将for程序后台运行,然后查看他的进程号,使用mykill结束掉for程序,再次查看发现for程序已经结束。

 

(3)捕获信号

程序捕获的信号,对信号的响应有三种方式,①默认,②忽略,③自定义

默认就是按照信号本身的意义进行。忽略就是捕获到信号但是忽略掉信号。我们演示自定义方式。自定义方式使用下面的函数:

演示signal文件如下:

它将我们从键盘上获取的终端终止信号(Ctrl+C)捕获到,然后打印出它的信号值。

 

我们重新开启一个终端,结束掉signal

我们经常使用此方式解决父子进程中产生的僵死进。(可以查看我的博客,僵死进程的处理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值