OS / 進程中某個線程崩潰,是否會對其他線程造成影響?

理論上講,線程掛掉只是觸發了 segment fault ,該信號在系統中默認的處理方式是終結該線程所在的進程,如果對該信號進行屏蔽也是可以的。

但是,重點來了,觸發 segment fault 的位置如果是 stack,那麼只要進程屏蔽了該信號,那麼對其他的線程是沒有影響;如果觸發 segment fault 的位置如果是 heap、全局變量等線程共享的部分,那麼就算屏蔽了該信號,那麼其他線程也會出現問題,只是時間上的事情。

總結來說,

  1. 如果進程不屏蔽 segment fault 信號,一個線程崩潰,所有線程終結。
  2. 如果屏蔽 segment fault 信號,且線程崩潰的位置是線程私有位置(stack),那麼其他線程沒有問題。
  3. 如果屏蔽 segment fault 信號,且線程崩潰的位置是線程共享位置(heap、全局變量等),那麼其他線程也會出現問題。

 

(SAW:Game Over!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章