我想确切地知道异步信号处理程序在Linux上是如何执行的。首先,我不清楚哪个线程执行信号处理程序。其次,我想知道让线程执行信号处理程序所遵循的步骤。
关于第一个问题,我读到了两种不同的、似乎相互矛盾的解释:
The Linux Kernel,作者: Andries Brouwer,:
当信号到达时,进程中断,保存当前寄存器,并调用信号处理程序。当信号处理程序返回时,中断的活动将继续。
让我认为Linux的行为是:
当一个信号被传递到一个进程时,如果它被捕获了,它将由一个且只有一个满足以下条件的线程来处理:
1. A thread blocked in a [**sigwait**(2)](h
计算机系统:程序员的观点说:
8.5.1信号术语--最多一次接收待定信号。对于每个进程,内核主要保持pending位向量中的挂起信号集和blocked位向量中的阻塞信号集。8.5.3当内核将进程p从内核模式切换到用户模式(例如,从系统调用返回或完成上下文切换)时,它检查未阻塞的挂起信号集(未决和阻塞)是否为p。如果这个集合是空的(通常情况下),那么内核将控制传递给逻辑控制flow of p中的下一个指令(I next)。但是,如果集合是非空的,那么内核在集合中选择一些信号k (通常最小的k)并强制p接收信号k。信号的接收触发了进程的一些动作。一旦该过程完成该操作,然后控制返回到逻辑控件flow o
我想知道UNIX信号的安全性。
SIGKILL会扼杀这个过程。那么,当非根用户的进程向根用户的进程发送信号时会发生什么呢?这个过程还在执行信号处理程序吗?
我遵循公认的答案(gollum's),输入man capabilites,我发现了许多关于Linux内核的内容。来自man capabilities:
NAME
capabilities - overview of Linux capabilities
DESCRIPTION
For the purpose of performing permission checks, traditional UNIX
im