当信号被传递时,信号处理程序在进程的堆栈上执行。
如果在sigaction()
中使用了SA_ONSTACK,则使用不同的堆栈。
使用不同的堆栈有什么用?有哪些使用案例示例?
备用堆栈的一个用途是尝试正确处理 SIGSEGV
信号。
如果您的进程因为超出了其堆栈限制而刚刚接收到一个 SIGSEGV
信号,那么您无法在该进程的堆栈上运行信号处理程序 - 它已经满了。拥有备用堆栈允许您在这种情况下(小心谨慎地)运行一些更为优雅的关闭程序。
SA_ONSTACK
以避免崩溃。
https://golang.org/pkg/os/signal/#hdr-Go_programs_that_use_cgo_or_SWIG
sigaltstack
的示例。 - cnicutar