2011-04-19 36 views
1

当用户程序被^ C中断时,缺省信号处理程序是在用户模式还是在内核模式下运行?用户程序被^ c打断

如果在内核模式下,哪个内核子系统调用默认的信号处理函数?

我在sigaction的docs和manpages中找不到任何参考。我在接受采访时被问到了这个问题。

回答

2

用户级代码始终以用户模式运行。包括信号处理程序(如果它们已由该进程设置)(或其环境 - 例如C库设置例程)。

如果没有注册给定信号的用户模式信号处理程序,并且它不被忽略(或不可忽略/可捕获为SIGKILL和SIGSTOP),则与该信号相关的操作(终止,核心转储,挂起,恢复)可以完全在内核方面进行。

信号传递主要由内核中的进程调度器子系统处理。

+0

当然,进程调度器子系统应该处理信号传递是有意义的。一个相关的问题是内核如何知道将中断发送到哪个进程?我假设进程调度器子系统将用户中断发送到当前活动的process.is,对吗?感谢您的帮助。 – liv2hak 2011-04-19 10:46:40

+1

没有真正的“当前活动过程”,可以有许多过程当前活动。如果你的意思是“当我输入control-c时会发生什么情况,使得我的shell中的当前进程接收到一个信号?”然后问这个问题 - 这不是一个微不足道的过程,并涉及输入子系统,可能是WM/X11,shell ...我不够知识以回答这个问题。 – Mat 2011-04-19 10:59:38

+0

“SIGINT”的缺省操作,杀死进程,是在kernelspace而不是用户空间中实现的。 – 2011-04-19 11:32:15

0

我遇到了this,表明处理程序驻留并以用户模式运行。幻灯片8中有一些细节。