繁体   English   中英

信号处理程序是否在内核或用户空间中运行?

[英]Do signal handlers run in kernel or user space?

为特定信号指定了用户定义的处理函数。在接收到该信号后,将调用处理函数。 处理函数是否在用户空间或内核空间中运行? 还是通常在用户空间或内核空间执行任何信号的动作?

该处理程序在用户空间中运行,并且只能访问该进程的虚拟地址空间。

当然,C标准规范对“用户”和“内核”一无所知。

信号处理程序必须在用户空间中运行。 如果它们在内核空间中运行,则它们可以访问整个计算机中的任何内容(因为内核可以控制所有进程)。 结果,恶意程序很容易通过简单地向自己发送信号就破坏其他程序的内存,窃取数据,甚至变得更糟。

一般来说,信号是在用户空间中执行的。 但是,由于C语言标准实际上并未定义用户空间和内核空间之间的分隔,因此可以想到可能存在并非如此的C语言实现。

但是请注意,在Windows和Unix的所有口味,信号保证在用户空间运行。

内核可以向用户空间发送信号,但反之则不能,并且要发送的数据量非常有限,并且信号处理程序在用户空间中运行。

说明:

为了能够从内核空间向用户空间发送信号,内核需要知道用户空间进程的pid。 内核模块一收到pid,就会查找相应的进程描述符,并向其发送信号。 与信号有关的所有信息都保存在struct siginfo

用户空间进程向内核注册了信号处理程序功能。 这会将信号处理程序功能的地址添加到过程描述符中。 每次传送特定信号时都会执行此功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM