La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Synchronisation des processus père - fils Les signaux.

Présentations similaires


Présentation au sujet: "Synchronisation des processus père - fils Les signaux."— Transcription de la présentation:

1 Synchronisation des processus père - fils Les signaux

2 Signaux : terminaison dun processus Un processus termine à sa demande ou suite à l occurrence dun événement La terminaison implique : la libération des ressources (mémoire, verrous..) ; la fermeture des fichiers ; le signalement de lévénement aux fils (SIGHUP), en cas de fin de session ; le rattachement des processus fils (orphelins) à linit l information du père (SIGCHLD) ; sauvegarde du code de retour et passage à l état zombi

3 Demande de terminaison instruction return(valeur) --> retour au lanceur fonction standard de la bibliothèque C exit(), qui vérifie la copie des tampons #include void exit (int valeur) primitive du système _exit() (utilisée par exit()) #include void _exit (int valeur) Remarque : exit() est préférable à _exit() car elle vide les buffers.

4 Code de retour Le shell le stocke dans une variable (? Pour sh; status pour csh) Que se passe-t-il si le père termine avant le fils ?

5 Status ? père Fork() fils père Fork() fils status init SIGCHLD n=getppid() m=getppid() SIGHUP status init Père se termine avant le fils n= pid du père m=1 (pid de l init) Fils se termine avant le père

6 Synchronisation père-fils fork()wait() exit() execl() fils père recouvrement programme zombi Exemple : exécution dune commande dans sh : ps (pas de wait pour une commande lancée en arrière plan)

7 Primitive waitpid sélection dun fils particulier ou un groupe de processus valeur de retour : -1 : erreur (pas de fils) 0 : echec >0 pid dun fils zombi s il en existe un. pid_t wait(pid_t pid, int *ptr_status, int options); sélection dun fils : -1 : tous les fils 0 : tous les fils du groupe de l appelant >0 pid ayant cette identité. Syntaxe : options : 0 : bloquant 1 : non bloquant (constante WNHANG dans wait.h) - sil nexiste pas de fils ayant terminé, échec, waitpid retourne « 0 »; sinon retourne le pid du fils terminé ou -1.

8 Signaux Signal : moyen dindiquer un événement ou de synchroniser des processus Evénements : extérieur au processus : terminaison dun fils, occurrence dune interruption (^C par exemple), etc. intérieur au processus en cas derreurs : instruction illégale, violation de segment, etc. Synchronisation : primitive : int kill(pid_t pid, int sig) kill -signum pid si pid >0, signal envoyé au processus de ce pid si pid = 0, signal envoyé à tous les processus du groupe de l appelant

9 Principaux signaux (kill -l pour avoir la liste complète ou signal.h) SIGHUP SIGINT SIGQUIT SIGILL SIGFPE SIGKILL SIGSEGV SIGPIPE SIGALARM N°Nom EvénementEffet Fin de session Caractère dinterruption frappé Caractère quit Instruction illégale Expr. arithmétique (v.flottante) Terminaison Violation mémoire Ecriture dans tube sans lecteur Alarme dhorloge Terminaison Core dumped

10 Principaux signaux (kill -l pour avoir la liste complète ou signal.h) SIGUSR1 SIGUSR2 SIGCHLD SIGSTOP SIGCONT N°Nom EvénementEffet Signal 1 pour les utilisateurs Terminaison d un fils Demande de suspension Demande de reprise (pour un processus suspendu) Terminaison Ignorer Suspension Ignorer Signal 2 pour les utilisateurs Remarque : les N° ne sont pas standards. Pour la portabilité, il vaut mieux utiliser les noms symboliques

11 A chaque type de signal est associé un handler par défaut défini dans SIG_DFL. Plusieurs signaux peuvent utiliser le même handler. Par exemple, pour terminer un processus, le même handler peut être utilisé par les signaux 1, 2, 9, 13.. Signal ignoré : on associe au signal un handler vide : SIG_IGN ce handler vide est exécuté mais na pas deffet. Signal bloqué : aucun handler nest exécuté. Signal pendant qui attend la modification du masque. Traitement dun signal

12 Comportements par défaut SIGHUP SIGINT SIGQUIT SIGFPE SIGKILL SIGSTOP SIGPIPE... terminer core_dump SIG_IGN suspendre reprendre terminaison terminaison avec copie de limage mémoire (core dumped) SIG_IGN : ignoré -- SIGCHLD dans la plupart des versions suspension : arrêt du processus (SIGSTOP, SIGTSTP) reprise d un processus suspendu (SIGCONT) SIGKILL, SIGSTOP, SIGSTSTP : handlers non modifiables et signaux ne peuvent être bloqués.

13 Handler Pas de valeur de retour Récupère le numéro du signal comme paramètre Invoqué quelque soit lendroit du code installation simplifiée avec linterface signal() void handler (int sig) {………….. } ….. signal (sig, handler) attente dun signal : int pause(void) ou int sleep(int sec)

14 Prise en compte dun signal La réception dun signal met à 1 le bit du vecteur des signaux pendants Représentation des signaux dans le BCP NSIG 321 0/1 Signaux pendants Signaux bloqués ou masqués Comportements à la prise en compte

15 Prise ne compte dun signal La prise en compte nest pas instantanée Actif en mode user Actif en mode noyau Handler est exécuté juste avant le passage du mode actif en noyau l état actif en mode user. Terminaison éventuelle avant le passage à létat actif en mode user.

16 Prise en compte dun signal Signal reçu par un processus en attente en attente Pour que le signal soit pris en compte, il faut activer le processus même sil doit retourner en attente après lexécution du handler Réception du signal Prêt actif en noyau


Télécharger ppt "Synchronisation des processus père - fils Les signaux."

Présentations similaires


Annonces Google