2014-11-20 123 views
0

我有一個問題。我正在爲這樣的信號定義我自己的處理程序。發送USR2信號後忽略信號處理程序

sig_11.sa_handler = &signal1_SIGILL; 
    sig_11.sa_flags=SA_NODEFER; 
    if (sigaction(SIGUSR2, &sig_12, NULL) < 0) { 
     perror ("sigaction");    
     return 1; 
    } 

我正在爲不同的信號創建這樣的處理程序。但這並不重要。
在我發送USR2信號之前,一切看起來都很好,並且工作得很好。看起來,這使得進程忽略所有其他信號。它不會終止進程,而是忽略所有其他信號。
這是正常行爲嗎?

回答

0

你沒有初始化sa_mask和你沒有告訴我們如何創建sig_11變量,也沒有什麼是在處理程序中完成的,但我懷疑一個壞值在sa_mask設定,所以至少在處理過程中運行一些信號可能會被阻塞。通常在處理程序結束時,事情將恢復正常。可以使用至少SIGKILL,因爲它不能被阻擋或捕獲。