[英]When does a signal get automatically rethrown?
建議重置信號處理程序會強制重新拋出信號
表示一旦信號處理程序返回,信號將被重新拋出
兩者都不是真的。 但是,我不相信這就是評論所暗示的。 可能的情況是它在某些情況下未處理信號。 所以觸發信號的原始問題再次觸發相同的信號。 考慮這個例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void handler(int sig)
{
write(1, "Received FPE\n", sizeof "Received FPE\n" - 1);
}
int main(void)
{
signal(SIGFPE, handler);
printf("%f", 1/0);
}
(這應該會導致無限循環)。
SIGFPE 在這里並沒有真正“處理”。 因此,一旦控制從信號處理程序返回,SIGPFE 就會被重復觸發。 我相信這是那些評論中提到的場景。
同樣,當信號被阻塞時,它們將被排隊並在解除阻塞后發送到進程。 他們在安裝信號處理程序時將其屏蔽。 這可能是第二條評論所指的內容。 屏蔽也可以通過sigprocmask
或pthread_sigmask
完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.