sigreturn(2) System Calls Manual sigreturn(2) NOM sigreturn, rt_sigreturn - Revenir d'un gestionnaire de signaux et nettoyer la pile BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS int sigreturn(...); DESCRIPTION Si le noyau Linux determine qu'un signal non bloque est en attente d'un processus, au prochain retour en mode utilisateur de ce processus (par exemple au retour d'un appel systeme ou quand le processus est reordonnance sur le processeur), il creera un nouvel emplacement dans la pile de l'espace utilisateur ou il enregistrera des morceaux de contexte de processus (mot sur l'etat du processeur, registres, masque de signal et parametres de la pile du signal). Le noyau s'arrange aussi pour que, lors du retour a l'espace utilisateur, le gestionnaire de signal soit appele et pour qu'au retour du gestionnaire, le controle soit redonne a un bout de code de l'espace utilisateur appele generalement le << trampoline de signal >>. En retour, ce code appelle sigreturn(). Cet appel a sigreturn() defait tout ce qui a ete fait -- modifier le masque de signaux du processus, commutation des piles (consultez sigaltstack(2)) -- de facon a invoquer le gestionnaire de signal. L'utilisation des informations precedemment sauvegardees dans la pile de l'espace utilisateur sigreturn() restaure le masque de signal du processus, commute les piles et restaure le contexte du processus (drappeaux et registres du processeur, notamment le pointeur de la pile et les instructions du pointeur), de sorte que le processus reprenne son execution au point ou il a ete interrompu par le signal. VALEUR RENVOYEE sigreturn() ne renvoit jamais. VERSIONS De nombreux systemes de type UNIX ont un appel systeme sigreturn() ou presque equivalent. Cependant, cet appel n'est pas specifie dans POSIX et les details de son comportement varient en fonction des systemes. STANDARDS Aucun. NOTES sigreturn() n'existe que pour permettre l'implementation de gestionnaires de signal. Il ne devrait jamais etre appele directement (en effet, une simple enveloppe sigreturn() de la bibliotheque GNU C renvoie simplement -1 et errno est positionne sur ENOSYS). Les details des parametres (s'il y en a) passes a sigreturn() varient selon l'architecture (sur certaines architectures telles que x86-64, sigreturn() ne prend aucun parametre puisque toutes les informations dont il a besoin sont disponibles dans la pile creee precedemment par le noyau dans la pile de l'espace utilisateur). Autrefois, les systemes UNIX mettaient le code du trampoline de signal dans la pile utilisateur. De nos jours, les pages de la pile utilisateur sont protegees pour interdire l'execution d'un code. Ainsi, sur les systemes Linux contemporains, selon l'architecture, le code du trampoline de signal reside soit dans le vdso(7), soit dans la bibliotheque C. Dans ce dernier cas, la fonction enveloppe sigaction(2) de la bibliotheque C informe le noyau de l'emplacement du code du trampoline en mettant son adresse dans le champ sa_restorer de la structure sigaction et il positonne le drapeau SA_RESTORER dans le champ sa_flags. Les informations du contexte du processus sauvegardees vont dans la structure ucontext_t (consultez ). Cette structure est visible a l'interieur du gestionnaire de signal comme le troisieme parametre d'un gestionnaire mis en place a l'aide de sigaction(2) avec le drapeau SA_SIGINFO. Sur d'autres systemes UNIX, l'operation de trampoline du signal differe quelque peu. En particulier, sur certains systemes ou il y a une transition vers le retour a l'espace utilisateur, le noyau donne le controle au trampoline (plutot qu'au gestionnaire de signal) et le code du trampoline appelle le gestionnaire de signal (puis appelle sigreturn() apres le renvoi du gestionnaire de signal). Differences entre bibliotheque C et noyau L'appel systeme Linux d'origine s'appelait sigreturn(). Toutefois, avec l'arrivee des signaux en temps reel dans Linux 2.2, un nouvel appel systeme, rt_sigreturn(), a ete ajoute pour prendre en charge un type sigset_t elargi. La bibliotheque GNU C nous cache ces details en appelant de maniere transparente rt_sigreturn() quand le noyau le fournit. VOIR AUSSI kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 sigreturn(2)