当前位置: 技术问答>linux和unix
一个关于信号处理的问题
来源: 互联网 发布时间:2016-09-03
本文导语: 我看书有个这么个问题 void handler(int s) { signal(SIGINT, handler);//reset handler //do something } 就是在上面那个重置部分那句是干什么不是很懂, 这个是属于不可靠信号, 小弟是新手,还望高手赐教 ...
我看书有个这么个问题
void handler(int s)
{
signal(SIGINT, handler);//reset handler
//do something
}
就是在上面那个重置部分那句是干什么不是很懂,
这个是属于不可靠信号,
小弟是新手,还望高手赐教
void handler(int s)
{
signal(SIGINT, handler);//reset handler
//do something
}
就是在上面那个重置部分那句是干什么不是很懂,
这个是属于不可靠信号,
小弟是新手,还望高手赐教
|
signal 信号函数只使用一次,所以每次都要重新把信号和处理函数关联起来
|
在比较老的unix系统中会有楼主所说的不可靠信号的出现:信号没出现一次后,该信号的处理方式就会被系统重新设置为默认处理方式,所以才会有楼主代码中对信号处理函数重新关联的必要性。
但是在新的系统中,这种不可靠信号应该是很少出现的(4.2BSD/SVR3/POSIX.1都支持可靠信号)
也就是说楼主所说的对信号处理函数重新关联语句是没有必要的。
但是在新的系统中,这种不可靠信号应该是很少出现的(4.2BSD/SVR3/POSIX.1都支持可靠信号)
也就是说楼主所说的对信号处理函数重新关联语句是没有必要的。
|
signal(SIGINT, handler);
当进程收到SIGINT信号时,调用handler函数处理。
SIGINT信号一般是:
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
两个这类问题了。
当进程收到SIGINT信号时,调用handler函数处理。
SIGINT信号一般是:
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
两个这类问题了。
|
用sigaction就没有这个问题了,这是由于不可靠信号造成的。楼主看一下aupe的第10章就有描述