Si un processus Unix (Posix) reçoit un signal, un gestionnaire de signal s'exécute.
Que va-t-il lui arriver dans un processus multithread? Quel thread reçoit le signal?
À mon avis, l'API de signal devrait être étendue pour gérer cela (c'est-à-dire que le thread du gestionnaire de signal devrait pouvoir être déterminé), mais en cherchant des informations sur le net, je n'ai trouvé que des flammes d'un an sur la liste de diffusion du noyau Linux et sur différents forums. Si j'ai bien compris, le concept de Linus différait de la norme Posix, et d'abord une couche de compatibilité a été construite, mais maintenant Linux suit le modèle posix.
Quel est l'état actuel?
linux
signals
posix
multithreading
peterh - Réintégrer Monica
la source
la source
Réponses:
L'entrée dans POSIX sur " Génération et livraison de signaux " dans "Justification: Informations générales sur les interfaces système" indique
Du
signal(7)
manuel sur un système Linux:Et dans
pthreads(7)
:Du
pthreads(3)
manuel sur un système OpenBSD (comme exemple d'une approche alternative):(Je ne sais pas actuellement comment cela est géré lorsque plusieurs threads s'exécutent simultanément sur une machine multiprocesseur)
L'ancienne implémentation LinuxThread des threads POSIX permettait uniquement de cibler des threads uniques distincts par des signaux. Depuis
pthreads(7)
sur un système Linux:la source