pthread: les autres threads s'arrêtent-ils pendant l'exécution du gestionnaire SIGSEGV?

Je développe un programme sur Solaris 10. Je veux qu'il imprime la trace de pile sur l'accident. J'ai trouvé cet exemple:

static void pstack()
{
  char buf[256];

  sprintf(buf, "/usr/proc/bin/pstack %d |/bin/tee traceback.txt\n", (int)getpid());
  /* undefine LD_PRELOAD to avoid 64-bit problems */
  (void)putenv("LD_PRELOAD=");
  system(buf);
}
void sighanterm(int signo, siginfo_t *info, void *context) {
    ...
    pstack();
}

La chose intéressante est la suivante: pendant que /usr/proc/bin/pstack s'exécute, les autres threads continuent à imprimer leur sortie. Est-ce que les threads reprennent quand le system() est appelé ou ils ne s'arrêtent pas du tout? Puis-je les arrêter explicitement dans le gestionnaire?

0
Eh bien, je n'ai rien pour le sauvegarder, mais j'imagine que le gestionnaire par défaut les tue mais quand vous fournissez votre propre gestionnaire (comme vous le semblez) ils ne sont pas mis en pause ou tués jusqu'à ce que vous le fassiez vous-même.
ajouté l'auteur Kevin, source

1 Réponses

Non, un SIGSEGV manipulé n'affecte pas les autres threads (bien que si cela résultait d'une corruption de mémoire ou d'un autre UB, cet UB pourrait bien entendu affecter d'autres threads). En revanche, un SIGSEGV non géré termine l'ensemble du processus.

0
ajouté