簡體   English   中英

信號何時自動重新拋出?

[英]When does a signal get automatically rethrown?

breakpad 中的以下注釋表明重置信號處理程序會強制重新拋出信號。 但是,我無法在網上找到任何描述此行為的文檔。

此外, 這里的注釋說一旦信號處理程序返回,信號將被重新拋出。 這也是信號處理程序恢復或重置為默認值的結果嗎?

建議重置信號處理程序會強制重新拋出信號

表示一旦信號處理程序返回,信號將被重新拋出

兩者都不是真的。 但是,我不相信這就是評論所暗示的。 可能的情況是它在某些情況下未處理信號。 所以觸發信號的原始問題再次觸發相同的信號。 考慮這個例子:

#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 就會被重復觸發。 我相信這是那些評論中提到的場景。

同樣,當信號被阻塞時,它們將被排隊並在解除阻塞后發送到進程。 他們在安裝信號處理程序時將其屏蔽。 這可能是第二條評論所指的內容。 屏蔽也可以通過sigprocmaskpthread_sigmask完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM