2010-12-15 106 views
3

我有一個系統有10多個線程。我有一個信號處理程序來捕獲SIGSEGV。如果一個線程生成SIGSEGV,那麼這個信號會傳遞給所有線程,還是傳遞給產生信號的線程呢?POSIX線程和SIGSEGV

回答

7

SIGSEGV是同步信號。它將被傳遞到導致無效內存訪問的線程。從signal(7)

可以產生的信號(以及因此待處理),用於處理作爲一個整體(例如, 使用 kill(2)時發送)或爲一個特定的線程(例如,某些信號,例如 如 SIGSEGVSIGFPE,由於執行特定的機器語言指令而生成的結果是針對線程的,因爲針對使用 pthread_kill(3)的特定線程的信號是針對的。處理指向的信號可以是 傳遞給當前沒有信號被阻擋的任何一個線程。如果不止一個線程的信號被解除阻塞,那麼內核將選擇一個任意線程來傳送信號。
+2

謝謝。這個措詞不在MacOS X信號文檔中。 – vy32 2010-12-16 05:06:43