理论上讲,线程挂掉只是触发了 segment fault ,该信号在系统中默认的处理方式是终结该线程所在的进程,如果对该信号进行屏蔽也是可以的。
但是,重点来了,触发 segment fault 的位置如果是 stack,那么只要进程屏蔽了该信号,那么对其他的线程是没有影响;如果触发 segment fault 的位置如果是 heap、全局变量等线程共享的部分,那么就算屏蔽了该信号,那么其他线程也会出现问题,只是时间上的事情。
总结来说,
- 如果进程不屏蔽 segment fault 信号,一个线程崩溃,所有线程终结。
- 如果屏蔽 segment fault 信号,且线程崩溃的位置是线程私有位置(stack),那么其他线程没有问题。
- 如果屏蔽 segment fault 信号,且线程崩溃的位置是线程共享位置(heap、全局变量等),那么其他线程也会出现问题。
(SAW:Game Over!)