註冊信號處理函數後,某些本應不受影響的系統調用(如 read、wait)可能被信號中斷,返回 -1 並設 errno = EINTR。若程式未檢查此錯誤碼,可能誤以為調用失敗導致邏輯錯誤或資料遺失。
對策:使用 sigaction 設置 SA_RESTART 標誌,讓系統自動重啟被中斷的調用。
執行信號處理函數時若又有信號到達,可能導致第一個處理被中斷,轉而執行第二個。若處理函數使用靜態/全域變量,會造成資料競爭與邏輯錯亂。
對策:sigaction 設置 SA_NODEFER 阻塞同類信號,或在處理函數中避免使用非可重入函數與共享資料。
alarm+pause 競態調用 alarm 後緊接 pause,若系統極度繁忙導致 pause 尚未執行時鬧鐘已觸發,進程將永久掛起。
對策:改用 select、poll 或 nanosleep 實現超時等待,避免依賴信號同步。
sigaction 而非 signal,明確指定 SA_RESTART、SA_NODEFER、SA_SIGINFO 等標誌。volatile sig_atomic_t 標誌),複雜邏輯放主迴圈。printf、malloc、lock 等)。