Yar*_*Tal 5 c c++ linux multithreading signals
在Linux中,当信号被发送到进程/线程(无论出于何种原因)时,是否立即调用信号处理程序(假设有一个,并且信号没有被阻止)?
我的意思是,我很确定在处理信号的进程/线程中它将立即被调用,但我的意思是相对于其他进程/线程。
如果立即调用处理程序,它是否也会使相应的进程/线程处于活动状态(以便其正常执行立即继续)?
编辑
由于我原来的问题似乎被误解了,我将尝试用一个例子再次解释。
假设我的计算机有一个 CPU,正在运行 2 个进程,进程“A”和进程“B”。并假设它们都没有在系统调用中阻塞(如sleep)。通常,我猜,操作系统会在一小段时间后在执行进程“A”和进程“B”之间切换(例如,执行进程“A”100毫秒,然后处理“B”100毫秒,然后再次处理A 100毫秒) , ETC。)。假设进程“A”现在是活动进程(即它现在占用CPU)。现在假设进程“A”向进程“B”发送信号(或者,操作系统出于某种原因将该信号发送给进程“B”)。进程“B”已为该信号注册了一个处理程序,并且没有阻止它。所以问题是,操作系统现在会立即停止执行进程“A”并切换到执行进程“B”的信号处理程序吗?如果答案是肯定的,那么它之后会立即继续执行进程“B”(正常代码,而不是信号处理程序),还是切换回执行进程“A”,并且仅在一小段时间后恢复执行进程‘B’?
然后可以针对线程而不是进程询问相同的问题。
不,信号仅在上下文切换时传递。到那时所有信号都将排队。在众多相同类型的信号中,通常只有一个信号被传送到目的地。因此,我很高兴看到被破坏的信号多于传递的信号。我建议你查阅任何有关 UNIX 书籍的章节。我最喜欢的是了解linux内核和linux内核开发。如果您仍然需要技术帮助,请发表评论