Communication inter-processus Linux # # # signal (Sinal)

En informatique, le signal est Unix, Unix, et un type parmi d'autres systèmes d'exploitation conforme POSIX, le processus de communication a de manière restreinte. Il est un mécanisme de notification asynchrone, un procédé utilisé à l'événement d'alerte est survenue. Quand un signal est envoyé à un processus, le processus de système d'exploitation interrompt le flux normal de contrôle, cette fois, toute opération non atomique est interrompue. Si le processus est fonction de traitement signal défini, il sera exécuté, exécuter sinon le gestionnaire par défaut.

signal d'interruption de fonction (signal et le signal pour abréger) est utilisé pour informer le processus d'événements asynchrones a eu lieu. Vous pouvez appeler l'autre soft kill signal d'interruption est envoyé par le système entre les processus. Le noyau peut également envoyer un signal au processus en raison d'événements internes, la survenance d'un processus de notification d'événements. Notez que le signal est utilisé pour notifier seulement un processus de ce qui est arrivé événement, le processus est de ne pas transférer les données. Processus de signaux reçus ont des approches différentes à différents signaux. Le procédé de traitement peut être divisé en trois catégories: la première est similaire au gestionnaire d'interruption, le signal à traiter, le procédé peut être des fonctions de traitement spécifié pour le traitement par la fonction. La deuxième méthode consiste à ignorer un signal, le signal est pas de traitement, tout simplement pas eu lieu. La troisième méthode est la valeur par défaut du système de traitement de signal est retenu, une telle opération par défaut, l'action par défaut est telle que la plupart des processus se termine de signal. Procédé pour spécifier le comportement du procédé de traitement d'un signal d'appel de signal à travers le système. Il y a des entrées dans la table des processus dans un domaine de signal d'interruption programmable, le domaine de chaque bit correspond à un signal à, lorsqu'un signal est envoyé au processus, le bit correspondant est défini. On peut voir, le processus peut être réservé pour des signaux différents en même temps, mais pour le même signal, le processus ne sait pas combien est venu avant le traitement.

Sémaphore et ces deux termes est un seul mot, parfois nous serons très facile de penser à ces deux choses ne sont pas une chose, mais il est deux concepts complètement différents.

  • Signal: est envoyé par l'utilisateur, un système ou des informations de processus pour le processus cible pour informer le processus cible pour changer le système ou l'état d'exception. Le processus de notification produit un événement
  • Sémaphore : sémaphores est une variable particulière, son essence est un compteur qui enregistre le nombre de sémaphores ressources critiques, le nombre de combien, combien la valeur du sémaphore est, le processus d'accèstoutes ses opérations atomiques (fonctionnement pv , p: empreinte, v: ressources de libération). Son rôle est le processus de coordinationaccès àressources partagées,sorte que dans le même temps une section critique est seulement un processus pouraccéder. Pour le processus de synchronisation (pourprocessus de coordinationaccès aux ressources partagées)

Les situations suivantes peuvent provoquer des signaux

  • les événements de clavier   telles que la génération de signal SIGINT ctrl + c, ctrl + \ signal généré SIGQUIT, ctrl + z signal de génération SIGTSTP
  • exceptions matérielles   de défaillance matérielle. L' accès illégal mémoire (erreur de salve), à l' exception de 0 (exception à virgule flottante), les erreurs d'alignement de mémoire (erreur de bus) va générer un signal détecté par le matériel et notifie le noyau, le noyau envoie le signal approprié au processus, comme la division par zéro est effectuée instruction, le processus illégal pour accéder à la mémoire d'adresse, l' unité arithmétique du processeur génère une exception, l'exception sera interprété comme un signal de noyau est envoyé à un processus.
  • L' appel système   kill, abort, appels de fonction du système de relance, etc.
  • conditions de logiciel  à l'  aide d' une alarme de minuterie
  • commande du système    kill

Le signal est un événement asynchrone, lorsque le signal arrive, sauver l'environnement d'exécution en cours, tourner pour exécuter des fonctions de traitement du signal, lorsque le gestionnaire de signal est terminé, le site de récupération, continuer.

les signaux de processus reçus en mode trois traitements

  • Valeur par défaut: L'action par défaut pour effectuer le traitement du signal, si elle est le système de SIGINT, ce processus sera interrompu
  • Ignore: Nous ne traitons pas avec le signal, feint de ne pas voir SIGKILL SIGSTOP ne peut être ignoré
  • La capture et le traitement: lorsque le signal est venu, le code d'exécution pour écrire notre propre pour fournir une fonction de traitement du signal, nécessite le noyau pour passer à lors du traitement des signaux du mode utilisateur pour effectuer cette fonction de traitement (signal de capture cette action est que nous devons faire) SIGKILL SIGSTOP ne peut pas capturer

Inscrivez-vous le signal

typedef void  (* sighandler_t) (int);
sighandler_t signal (int signum   /*要注册的信号*/, sighandler_t handler /*信号执行函数*/);

capture du signal

  • (1) Tout d'abord, l'utilisateur est normalement effectuée dans le flux de commande principal de telle en raison d'une interruption, exception ou un appel de système directement dans le mode noyau pour le traitement des exceptions,
  • (2) le noyau traité anormal prêt à revenir au mode utilisateur, et avant que le processus actuel verra l'absence de signal peut atteindre, si l'on veut être remis au traitement du signal,
  • (3) Si la fonction de traitement de signal est de revenir au mode utilisateur fonction de traitement de signal défini par l'utilisateur pour effectuer défini par l'utilisateur
  • (4) Après l'exécution de fonctions de traitement de signal, le système demandera une sigreturn d'appel de fonction particulier à nouveau dans le mode noyau, le système effectue l'appel
  • (5) Ce système une fois l'appel terminé, il retournera au flux principal de commande est interrompu lieu continue d'exécuter le code suivant
  • (6) lorsque le flux de commande principal d'exécution si une exception est à nouveau rencontré, interruption ou un appel système continue à revenir à (1), continuer la procédure suivante

 

signal de signal fiable et peu fiable

le signal en temps réel: est un signal fiable
de signal en temps non réel: signaux peu fiables

le signal non fiable

  • 1-31 ne sont pas fiables, il y aura phénomène de perte de signal
  • Linux signaux hérités du signal Unix précédemment, le signal de défaut d'Unix
  • fonction de traitement du signal est terminé, le traitement de signal de réinitialisation pour le mode par défaut (Linux ont amélioré)
  • Il y aura une perte de signal, le signal n'aligne pas

signal fiable

  • Un signal réglé 34-64 refonte
  • Le signal ne sera pas la ligne de soutien perdu, la fonction de traitement du signal est terminée, ne reviendra pas au mode de traitement par défaut

 

[] Kill -l  commande vous pouvez afficher tous les signaux , il est maintenant le signal a été augmenté à 65, mais ici , je voudrais mentionner, 33-64 Ces signaux ne sont généralement pas de l'utilisation de c'est de distinguer un signal fiable et signaux peu fiables 32 signaux nouvellement ajoutés.

cll@cll-linux:~ $ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

[Signal Man 7]  Cette commande utilise l'homme pour voir le manuel, parce que dans la septième page, donc l'homme utilisation directe 7. signal standard commun comme suit:

Standard signals
       Linux  supports the standard signals listed below.  Several signal num‐
       bers are architecture-dependent, as indicated in  the  "Value"  column.
       (Where three values are given, the first one is usually valid for alpha
       and sparc, the middle one for x86, arm, and most  other  architectures,
       and  the  last one for mips.  (Values for parisc are not shown; see the
       Linux kernel source for signal numbering on that  architecture.)   A  -
       denotes that a signal is absent on the corresponding architecture.)

       First the signals described in the original POSIX.1-1990 standard.

       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

       The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

       Next  the  signals  not  in  the POSIX.1-1990 standard but described in
 Manual page signal(7) line 134 (press h for help or q to quit)

Dans le signal ci-dessus,

Programme ne peut pas capturer, bloquer ou ignorer les signaux 9) SIGKILL, 19) SIGSTOP
Pas revenir à l'action par défaut du signal 4) SEAL, 5) SIGTRAP
Par défaut conduirait à une erreur des signaux de processus 6) SIGABRT, 7) SIGBUS, 8) SIGFPE, 4) SEAL, 29) SIGIO, 3) SIGQUIT, 11) SIGSEGV, 5) SIGTRAP, 24) SIGXCPU, 25) SIGXFSZ
La valeur par défaut conduira à signaler processus de sortie 14) SIGALRM, 1) SIGHUP, 2) SIGINT, 9) SIGKILL, 13) SIGPIPE, SIGPOLL (envoyé quand un événement est envoyé à l'appareil Pollable, la partie du système), 27) SIGPROF, 31) SIGSYS, 15) SIGTERM, 10) SIGUSR1,12) SIGUSR2,26) sigvtalrm
La valeur par défaut conduira à l'arrêt du signal processus 19) SIGSTOP, 20) SIGTSTP, 21) SIGTTIN, 22) SIGTTOU
Le processus par défaut ne tient pas compte du signal 17) SIGCHLD, 30) SIGPWR, 23) Sigurd, 28) SIGWINCH
  • De plus, SIGIO est en sortie SVR4, est ignorée dans BSD 4.3;
  • SIGCONT est de continuer à accrocher dans le processus, sinon il est ignoré et ne peut être bloquée.

fonctionnement par défaut:

  •               Durée: mettre fin au processus
  •               Ign: ignorer les signaux (instantanée par défaut ignoré le type d'opération de signal)
  •               Noyau: mettre fin au processus, la génération de fichiers de base. (Processus d'identification causes de décès, GDB pour le débogage)
  •               Arrêt: processus d'arrêt (pause)
  •               Cont: Continuer les processus en cours

 

kill, killall, kill (pid_t pid, int sig);

kill, killall

Ces deux commandes sont utilisées pour envoyer des signaux dans le processus. commande kill nécessite un certain nombre de processus comme un argument, alors que killall un nom de processus. En outre, on peut également ajouter au nombre de signaux de transmission en tant que paramètre, après ces deux commandes. Par défaut, ils sont envoyés au signal de processus pertinent 15 (TERM). Par exemple, si vous voulez mettre fin au processus avec PID 666, entrez la commande suivante:

kill 666

Si vous voulez envoyer le signal 9 (SIGKILL), entrez:

kill -9 666

Supposons que vous voulez connaître le processus de mettre fin au nom de la commande. Vous pouvez y mettre fin par ce nom, mais ne pas utiliser ps pour trouver l'ID de processus du processus:

killall -9 your-process-name

 

kill (pid_t pid, int sig);

Pour l'envoi d'un signal à un processus ou groupe de processus.

fichier en-tête Utilisation:

#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);

Paramètres:
pid: Il y a quatre options possibles

  • 1. pid est supérieur à zéro, le signal d'identification pid doit être envoyé dans le procédé.
  • 2. pid égal à zéro lorsque le signal sera envoyé à tous appartiennent au même groupe et l'utilisation processus qui tuent () les appels de processus.
  • 3. pid égal à -1, le signal sera envoyé à tous les processus appelant au processus le droit d'envoyer un signal, en plus du processus 1 (init).
  • Lorsque 4. pid est inférieur à -1, le signal est envoyé au groupe de processus ID -pid.

sig: signal prêt code émis, sa valeur est égale à zéro si aucun signal est envoyé, mais le système effectuera la vérification des erreurs, utilisez souvent une valeur sig de zéro pour vérifier si un processus est toujours en cours d'exécution.

Publié 170 articles originaux · louange gagné 207 · Vues 4,59 millions +

Je suppose que tu aimes

Origine blog.csdn.net/xiaoting451292510/article/details/103731042
conseillé
Classement