【Unix/Linux】信号-库函数signal和CTRL-C

库函数signal和CTRL-C

进程接受和发出的信号(signal)相关的设置函数signal,和ctrl-c的处理原理

ctrl-c是通过中断信号切断当前程序运行的。

中断是信号的一种,信号有用户、内核、进程三个来源。
用户的一些特定操作可以被设置为信号;
而内核通过信号接受程序报错或利用信号通知进程特定事件的发生(利用信号实现内核和进程通信);
进程操作产生的信号被称为同步信号,用户操作产生的信号称为异步信号。

和信号相关的一个重要函数是<signal.h>(csignal)中的signal():
在这里插入图片描述
一般用法是

signal(信号名,处理方式);

较常用信号名的是SIGINT(中断)和SIGQUIT(退出)
处理方式有三种:

  • SIG_IGN:忽略信号,有无这个信号都不做响应。如果在某个进程(程序)中对信号SIGINT(中断)设置了处理方式SIG_IGN(忽略),那么ctrl-c就不再能如常退出这个进程(程序)了。
    (tips:还可通过CTRL-\发出SIGQUIT信号退出)
  • SIG_DEF:根据头文件中的默认设置对信号作出反应。
  • 函数指针:( 返回值类型为void、有一个int类型参数的函数指针).函数指针指向自定义的函数,也就是说通过这个设置能够对一些信号进行自定义的处理。

信号名是头文件中定义的宏,具体可通过man 7 signal 获知:
在这里插入图片描述

注意:为了避免因为错误的设置无法退出某些进程,有两个信号不能被忽略、挂起、阻塞,它们分别是SIGKILL和SIGSTOP.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值