Realmente no puede esperar recuperarse de una segfault. Puede detectar que sucedió y, si es posible, eliminar el estado específico de la aplicación relevante, pero no puede continuar el proceso. Esto es porque (entre otros)
- El hilo que falló no puede continuarse, por lo que sus únicas opciones son longjmp o terminar el hilo. Ninguno de los dos es seguro en la mayoría de los casos.
- De cualquier manera, es posible dejar un mutex/bloqueo en un estado bloqueado que hace que otros hilos que esperar para siempre
- Incluso si eso no sucede, puede filtrarse recursos
- Incluso si usted no hace bien de esas cosas, el hilo que segfaulted pudo haber dejado el estado interno de la aplicación inconsistente cuando falló. Un estado interno inconsistente podría causar errores de datos o más mal comportamiento, posteriormente, lo que provoca más problemas que simplemente dejar de fumar
Así que, en general, no hay ningún punto en atrapar y hacer otra cosa que terminar el proceso de una manera bastante abrupta.No tiene sentido tratar de escribir datos (importantes) en el disco, o continuar haciendo otro trabajo útil. Existe algún punto para eliminar el estado de los registros, que son muchas aplicaciones, y luego dejarlo.
Una cosa posiblemente útil para hacer podría ser ejecutar su propio proceso, o tener un proceso de vigilancia que se reinicia en caso de un bloqueo. (NB: el ejecutor no siempre tiene un comportamiento bien definido si su proceso tiene> 1 hilo)
+1: respuesta maravillosa ... muchas gracias. – jldupont
Un buen resumen, pero no estoy de acuerdo por el motivo que mencioné en mi respuesta; hay momentos en los que se está haciendo algo específico que puede causar una segfault, y "recuperación" no es un problema. –