簡體   English   中英

sigaction 只捕獲一次信號

[英]sigaction is catching signal only once

考慮以下代碼:

#include <signal.h>
#include <stdio.h>

    void catch ()
    {
        printf("hi\n");
    }
    int main()
    {
        struct sigaction act;
        act.sa_handler = catch;
        sigaction(SIGINT, &act, NULL);
        for(;;);
        return 0;
    }

當這個程序運行時。 我第一次按CTRL-C時,它會打印“hi”。
但是第二次程序退出。 這可能是什么原因?
我想要的是程序在每次發出信號時都會捕獲它。

如果您不使用任何 SA_FLAG 來明確定義“第一次捕獲信號后要做什么”的行為,它應該可以工作。

清除sigaction的內容,然后初始化。

memset(&act,0,sizeof(act)); // clear contents first
act.sa_handler = catch;
sigaction(SIGINT, &act, NULL);

請參閱sigaction(2)

此外,正如 Daniel 指出的那樣,不要在信號處理程序中使用 printf。 參見信號安全(7)

如果你想打印一些東西,或者只是在你的信號處理程序中做一些事情,你必須使用信號安全函數。 在您的情況下,您可以使用 write() 系統調用,而不是使用 printf。 write(2)

經過,

write(1,"hi\n",3); // 1 means standard out.

暫無
暫無

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

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