2010-10-24 88 views
8

Linux上用C語言建立一個能處理多個具有相同功能的POSIX信號的程序的最佳方式是什麼?單信號處理函數有多個信號的正確方法是什麼?

舉例來說,在我的代碼我有一個處理函數,我想一般電話時永遠的信號被捕獲執行一些動作:

/* Exit handler function called by sigaction */ 
void exitHandler(int sig, siginfo_t *siginfo, void *ignore) 
{ 
    printf("*** Got %d signal from %d\n", siginfo->si_signo, siginfo->si_pid); 
    loopCounter=0; 

    return; 
} 

我已經建立了兩個信號具有獨立的sigaction趕上要求每個信號:

/* Set exit handler function for SIGUSR1 , SIGINT (ctrl+c) */ 
struct sigaction act; 
act.sa_flags = SA_SIGINFO; 
act.sa_sigaction = exitHandler; 
sigaction(SIGUSR1, &act, 0); 
sigaction(SIGINT, &act, 0); 

這是設置此類型處理的正確方法嗎?有沒有其他方法可以讓我不必列舉所有可能的信號編號?

回答

3

我看不出你如何能直截了當地設置一個處理程序所有信號。但是,您可以關閉使用sigfillset()以生成一個包含所有有效信號的數字一組,然後用sigismember(),以確定號碼是否是集合了可能的信號數字迭代,並設置一個處理程序,如果因此得到相當。好的,我看不到確定最大可能信號數量的方法,因此您可能需要猜測合適的最大值。

+0

謝謝,這是一個好主意。我想我可以繼續列舉我想要捕捉的信號,因爲我對C很陌生,如果我錯過了某些東西,我很好奇。 – ammianus 2010-10-25 19:58:24

3

「正負號」「的sigaction」系統調用的參數是一個整數值,它不作爲一個標誌工作。

據我所知,有沒有辦法在一個呼叫分配一個處理函數的幾個信號。

+0

謝謝你明確的答覆。 – ammianus 2010-10-25 19:58:51