信号的捕获和处理

信号是操作系统向进程发送的软件中断消息,用于进程间的异步通信。常见信号包括SIGINT、SIGQUIT、SIGKILL、SIGALRM和SIGCHLD等。处理信号主要通过signal函数和更稳定的sigaction函数,其中sigaction允许更精细的控制和统一的行为,是现代编程的首选。

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

      信号(signal)是在特定事件发生时由操作系统向进程发送的消息。它一种软件中断,是进程间唯一的异步通信方式。

      信号有很多,常见的有:

  • SIGINT:在键盘按下<Ctrl+C>组合键后产生,默认动作为终止进程
  • SIGQUIT:在键盘按下<Ctrl+\>组合键后产生,默认动作为终止进程
  • SIGKILL:无条件终止进程。本信号不能被忽略、处理和阻塞。默认动作为终止进程。它向系统管理员提供了一种可以杀死任何进程的方法
  • SIGALRM:定时器超时,超时的时间由系统调用alarm设置。默认动作为终止进程
  • SIGCHLD:子进程结束时,父进程会收到这个信号。默认动作为忽略该信号


      信号的捕捉和处理


      信号的捕捉和处理由以下2个函数来完成,其中第一个函数也是由第二个函数实现的:

#include <signal.h>
sighandler_t signal(int signum, sighandler_t handler);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

      参数signum指定信号的种类,比如SIGINT、SIGKILL等。

      参数handler是一个函数指针,指定捕捉到该信号后的处理函数。

      signal函数执行成功时返回信号处理函数指针,发生错误时返回SIG_ERR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值