【发布时间】:2016-09-15 17:51:01
【问题描述】:
我看到进程需要处理信号的堆栈帧分配在函数setup_rt_frame()中。
我的问题是:它在哪里被取消分配?
谢谢!
【问题讨论】:
标签: linux linux-kernel signals linux-device-driver
我看到进程需要处理信号的堆栈帧分配在函数setup_rt_frame()中。
我的问题是:它在哪里被取消分配?
谢谢!
【问题讨论】:
标签: linux linux-kernel signals linux-device-driver
setup_rt_frame() 为实时信号 设置堆栈(请参阅man 7 signal)。它主要做两件事:
rt_sigreturn() syscall(详见man 2 sigreturn)。 如您所见,一旦信号处理程序完成,它将自动返回内核中的sys_rt_sigreturn() 函数。该函数将从用户堆栈中恢复内核堆栈并返回中断的用户空间进程。
所以,回答你的问题:
在哪里取消分配?
正在sys_rt_sigreturn()函数中恢复。
另见:
[1]How signals work internally?
[2]Who uses POSIX realtime signals and why?
[3] Implementation of signal handling(参见“传递信号 (7)”至“传递信号 (12)”部分)
【讨论】: