当前位置: 技术问答>linux和unix
请教信号量处理函数signal的问题?
来源: 互联网 发布时间:2016-12-06
本文导语: 问题是这个样子的: 有一段如下的代码: void handler(int sig_number);//信号量处理函数 int main() { //some code here signal(SIGINT,handler);//安装信号量 //some other code here. return 0; } void handler(int sig_number) { //do somet...
问题是这个样子的:
有一段如下的代码:
void handler(int sig_number);//信号量处理函数
int main()
{
//some code here
signal(SIGINT,handler);//安装信号量
//some other code here.
return 0;
}
void handler(int sig_number)
{
//do something here.
}
当执行到//some other code here.
这片代码区域的时候,产生了信号量。此时后续
代码会“中断”执行,转而去执行信号处理函数。
请问这是一种什么处理机制?
说一说我的看法:
说是中断,应该不是。严格来说,中断处理函数运行在
内核态。而信号量处理函数在用户态运行。但是我还是认为
这里采用了一种类似中断的机制。信号产生的时候,中断当前
的执行代码,转而去执行信号量处理函数,信号处理函数结束以后
返回中断的代码处。但是这种机制不就是中断了吗?
我搞不明白其中的道理,麻烦解释一下?
谢谢!
有一段如下的代码:
void handler(int sig_number);//信号量处理函数
int main()
{
//some code here
signal(SIGINT,handler);//安装信号量
//some other code here.
return 0;
}
void handler(int sig_number)
{
//do something here.
}
当执行到//some other code here.
这片代码区域的时候,产生了信号量。此时后续
代码会“中断”执行,转而去执行信号处理函数。
请问这是一种什么处理机制?
说一说我的看法:
说是中断,应该不是。严格来说,中断处理函数运行在
内核态。而信号量处理函数在用户态运行。但是我还是认为
这里采用了一种类似中断的机制。信号产生的时候,中断当前
的执行代码,转而去执行信号量处理函数,信号处理函数结束以后
返回中断的代码处。但是这种机制不就是中断了吗?
我搞不明白其中的道理,麻烦解释一下?
谢谢!
|
signal也叫做进程间软中断...
|
软中断 就是了 跟系统调用的机制有点像,但不完全一样,其实相当于切换线程一般