与处理异步信号相比,我试图找到处理同步信号(SIGSEGV,SIGILL等)的资源。处理同步信号
的典型的信号处理机制(使用kill,例如)调用来自内核的控制转移到用户模式信号处理程序。我的理解是,'同步'信号更像是系统调用,因为控制器会立即传输到内核 - 可能是因为同步信号通常与CPU中断(内存保护等)相关联,并且无论如何都会调用内核处理程序。
libc函数是否是'async-signal-unsafe'安全地用于同步信号处理程序?例如,我看到Linux mprotect(2)手册页在SIGSEGV处理程序中使用printf。我怎样才能确定一个函数是否可以在这些情况下使用?
如何同步信号的一个典型的类Unix内核的处理来自其处理异步信号的有什么不同?什么使他们“同步”?
定义的信号是不是异步? –
我不确定。这表示有两种类型:ftp://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_24.html。 –