理論上講,線程掛掉只是觸發了 segment fault ,該信號在系統中默認的處理方式是終結該線程所在的進程,如果對該信號進行屏蔽也是可以的。
但是,重點來了,觸發 segment fault 的位置如果是 stack,那麼只要進程屏蔽了該信號,那麼對其他的線程是沒有影響;如果觸發 segment fault 的位置如果是 heap、全局變量等線程共享的部分,那麼就算屏蔽了該信號,那麼其他線程也會出現問題,只是時間上的事情。
總結來說,
- 如果進程不屏蔽 segment fault 信號,一個線程崩潰,所有線程終結。
- 如果屏蔽 segment fault 信號,且線程崩潰的位置是線程私有位置(stack),那麼其他線程沒有問題。
- 如果屏蔽 segment fault 信號,且線程崩潰的位置是線程共享位置(heap、全局變量等),那麼其他線程也會出現問題。
(SAW:Game Over!)