使用signal函数注册信号

信号机制在编程中用于处理异步事件,如用户中断(Ctrl+C)。当执行非法操作如除0时,系统会发送特定信号如SIGFPE。程序可以通过忽略、默认处理或自定义回调函数来响应信号。例如,SIGSEGV信号发生时,程序可以记录日志并选择重启或退出。signal函数用于注册信号处理函数,如在tim_mainapp_signal函数中根据信号类型进行不同操作。

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

1.作用

信号为软件中断,提供了一种处理异步事件的方法,如接受终端用户的中断键(ctrl+c),系统通过信号机制停止一个程序。

2.信号名字

3.处理机制

若一个进程执行了除0的操作,则系统会将SIGFPE信号发送给该程序。程序有以下三种处理信号的方式。

  1. 忽略信号。大多数信号可以使用该方式,但是SIGKILL和SIGSTOP不能被忽略

  2. 按系统默认方式处理。大多数信号的默认动作是终止该进程。

  3. 捕捉信号并处理:程序提供一个自编函数作为回调,调用信号注册函数。当信号发生时候,系统自动回调该自编函数处理信号。通过该自编函数,我们能够知道什么时候发生了什么信号,并按期望的方式处理它。

 4.信号注册函数

 __sighandler_t signal (int __sig, __sighandler_t __handler)

需要两个参数,返回一个函数指针sighandler_t,而该指针指向的函数无返回值

第一个参数signo是一个整形值,用来传递想要捕获的信号。
第二个参数handler是一个函数指针,也就是自编的信号处理函数的指针。

signal(SIGSEGV, tim_mainapp_signal);

void tim_mainapp_signal(int signal)
{
	tim_log("signal=%d",signal);

	if(!get_debug())
	{
		tim_reboot();
	}else
	{
		mainapp_exit(1);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值