簡體   English   中英

觸發句柄信號僅一次

[英]sigaction handle signal just once

有沒有辦法用捕捉的信號只有一次sigaction結構和功能? 更具體地說,我想簡單地將特定信號( SIGINT )重置為默認值。 是否可以在處理程序中實現?

編輯

因此,這樣的事情將是正確的:

 void sig_int(int sig) { printf(" -> Ctrl-C\\n"); struct sigaction act; act.sa_handler = SIG_DFL; if(sigaction(SIGINT, &act, NULL) < 0) { exit(-1); } } int main() { struct sigaction act; act.sa_handler = sig_int; if(sigaction(SIGINT, &act, NULL) < 0) { exit(-1); } while(1) { sleep(1); } return 0; } 

struct sigactionsa_flags成員中設置的標准SA_RESETHAND標志恰好可以做到這一點。

在指定SIGINT處理程序時設置該標志,並且該處理程序在進入時將重置為SIG_DFL。

是的,您可以在信號處理程序中調用sigaction 這是由Posix指定的,在Podix中(在XBD第2.4.3章中 )“定義了一組應該是異步信號安全的功能”。 然后,它指出“應用程序可以不受限制地從信號捕獲功能中調用它們。” sigaction()在該列表中。

只需在程序中恢復默認操作即可。

struct sigaction old;
void sig_int(int sig)
{
        printf(" -> Ctrl-C\n");

        if(sigaction(SIGINT, &old, NULL) < 0)
        {
                exit(-1);
        }

}

int main()
{
        struct sigaction act;
        act.sa_handler = sig_int;

        if(sigaction(SIGINT, &act, &old) < 0)
        {
                exit(-1);
        }

        while(1)
        {
                sleep(1);
        }

        return 0;
}

暫無
暫無

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

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