2010-12-15 65 views
3

J'ai un système avec plus de 10 threads. J'ai un gestionnaire de signal pour attraper SIGSEGV. Si un thread génère SIGSEGV, ce signal va-t-il à tous les threads, ou seulement au thread qui a généré le signal?Threads POSIX et SIGSEGV

Répondre

7

SIGSEGV est un signal synchrone. Il sera remis au thread qui a provoqué l'accès mémoire invalide. De signal(7):

Un signal peut être généré (et donc en attente) pour un processus dans son ensemble (par exemple, lorsqu'ils sont envoyés en utilisant kill(2)) ou pour un fil spécifique (par exemple, certains signaux, comme que SIGSEGV et SIGFPE, généré à la suite de l'exécution d'une instruction de langage machine spécifique sont dirigés par des threads, comme le sont les signaux ciblés sur un thread spécifique en utilisant pthread_kill(3)). Un signal dirigé par le processus peut être envoyé à l'un quelconque des threads qui n'a pas actuellement le signal bloqué. Si plus d'un des threads a le signal débloqué, alors le noyau choisit un thread arbitraire auquel fournir le signal.
+2

Merci. Ce verbiage ne figure pas dans la documentation du signal MacOS X. – vy32