Unité TOS : Signaux dans GEMDOS
ATTENTION: Sous pure Pascal 1.1, les constantes (en majuscules) dans le tableau ci-dessous, ne sont pas définies.
Le concept de "signal", venant du monde the U*NIX, est également disponible dans le systèmes d'exploitation MiNT/FreeMiNT (anciennement appelé MULTITOS) et MagiC (à partir de la Version 4.50). Les signaux peuvent être considérés comme des messages de nombres naturels représentant une condition d'exception donnée. Ils sont comparables à une interruption ou à une exception CPU, à la différence qu'ils traitent d'une implémentation purement logicielle.
Ce fichier HTML est extrait de la doc officielle de MiNT/FreeMiNT qui est programmée en langage C, mais les valeurs des signaux sont exactement les mêmes pour le langage Pascal, puisque venant du système MiNT installé.
Chaque processus possède :
Un vecteur binaire du signal en attente. Il décrit les signaux en attente de traitement, peut-être parce qu'ils sont bloqués par le masque de signal ou parce que le processus est dans un état où il ne peut pas les traiter.
Un masque de signal. Cette valeur de 32 bits définit les signaux actuellement bloqués comme un vecteur binaire ; si, par exemple, le bit 30 est activé dans ce vecteur, le signal SIGUSR2 est bloqué. Le masque de signal est non seulement affecté explicitement (c'est-à-dire par les appels système), mais aussi implicitement par d'autres processus. Par exemple, lors du traitement d'un signal, celui-ci est bloqué, mais d'autres peuvent survenir. Une fois le signal traité, il est à nouveau libéré et les signaux en attente peuvent alors être traités. Il convient de noter que certains signaux (par exemple SIGKILL, SIGSTOP, SIGCONT) ne peuvent pas être masqués.
Un tableau sous la forme SIGACTION
Lors d'une exécution Pexec, le masque de signal et la valeur en attente (voir ci-dessus) du processus fils sont mis à zéro. L'élément sa_handler de la structure sigaction est hérité, et une valeur différente de 0 ou 1 est toujours définie à 0. Les éléments sa_mask et sa_flags de la structure sont mis à zéro.
La plupart des signaux peuvent être interceptés par un programme (par exemple pour appeler une routine donnée à leur réception), ignorés ou bloqués. Les signaux bloqués sont ignorés jusqu'à la levée du blocage. Re
terminologie : On dit qu'un signal est envoyé à un processus lorsque l'exception qu'il représente se produit, ou qu'il est envoyé par un autre processus via Pkill. D'autre part, un signal est intercepté par un processus lorsque le processus correspondant se réveille et lance les actions correspondant au signal. Il est à noter que le traitement du signal prend du temps : un laps de temps considérable peut s'écouler entre l'envoi d'un signal et l'exécution de l'action correspondante.
Au total, 31 signaux possibles (de 0 à 30) sont disponibles, mais ils n'ont pas tous de signification fixe. La liste suivante décrit (pour autant que nous le sachions) tous les signaux possibles sous la forme suivante :
numéro du signal, nom du signal, signification du signal pour le processus récepteur. Sauf indication contraire explicite, l'action par défaut à la réception d'un signal est l'arrêt du processus récepteur.
| Numéro Nom |
Signification
|
| |
|
| 0 SIGNULL |
Null : Ce signal n'a pas d'action par défaut, car, à proprement parler, il ne s'agit pas d'un signal. Avec Pkill, il peut toutefois être utilisé pour tester l'existence d'un processus enfant. Le signal ne peut être ni masqué ni intercepté.
|
| 1 SIGHUP |
Raccrocher : Ce signal est généralement envoyé lorsque le terminal auquel un processus est connecté n'est plus valide. Après réception de ce signal, le processus ne doit plus envoyer de données au terminal. Dans MagiC, le VT52 envoie ce signal lorsqu'une fenêtre de terminal est fermée.
|
| 2 SIGINT |
Interruption : Généralement envoyée lorsque l'utilisateur appuie sur la combinaison de touches ^C pour interrompre un processus. Ce signal est utilisé par les versions ultérieures de MagiC à la place des anciennes méthodes de gestion de ^C.
|
| 3 SIGQUIT |
Quitter : Généralement envoyée lorsque l'utilisateur appuie sur la combinaison de touches ^\. Ce signal devrait être plus « hard » que SIGINT et, pour le moment, il n'est pas envoyé par MagiC ni VT52.
|
| 4 SIGILL |
Instruction illégale : Correspond au vecteur d'exception du processeur 68 k du même nom. Le signal ne doit pas être intercepté. Dans MiNT, le signal peut être intercepté, c'est-à-dire que le vecteur sera dévié pour presque tous les processus. Dans MagiC, cependant, cela ne fonctionne pas actuellement, de sorte qu'ici, 8 bombes apparaîtront toujours.
|
| 5 SIGTRAP |
Trap : Correspond au vecteur d'exception « Trace » du processeur 68 k et est envoyé après l'exécution de chaque instruction lorsque le système est en mode « trace » pas à pas. Ce signal ne doit être intercepté que par les débogueurs. Dans MiNT, le signal peut être intercepté, c'est-à-dire que le vecteur est dévié pour presque tous les processus. Dans MagiC, cependant, cela ne fonctionne pas actuellement, de sorte qu'ici, 9 bombes apparaissent systématiquement.
|
| 6 SIGABRT |
Abort : Normalement utilisé par la fonction de bibliothèque abort en ANSI
C, ce signal ne doit pas être intercepté. Ce signal n'est pas envoyé par le système d'exploitation lui-même.
|
| 7 SIGPRIV |
Violation de privilèges : Correspond au vecteur d'exceptions du même nom du processeur 68 k, lorsqu'un processus tente d'exécuter une instruction en mode utilisateur qui ne peut être exécutée qu'en mode superviseur.
Ce signal ne doit pas être intercepté. En MiNT, cependant, cela est possible, de sorte que le vecteur d'exceptions est détourné pour presque tous les processus. Mais dans MagiC, cela ne fonctionne pas actuellement, de sorte que 8 bombes apparaîtront systématiquement.
|
| 8 SIGFPE |
Exception en virgule flottante : L'action par défaut consiste à ignorer le signal. Cela correspond au vecteur d'exception de 68 k « Division par zéro » ou à une exception en virgule flottante. Le signal peut être ignoré ou intercepté. Dans MiNT, le signal peut être intercepté, de sorte que le vecteur sera dévié pour presque tous les processus. Dans MagiC, en revanche, cela ne fonctionne pas actuellement.
|
| 9 SIGKILL |
Kill : Arrêt forcé du processus de réception. Le signal
ne peut être ni masqué ni intercepté ; il ne doit donc être envoyé
qu'en cas d'échec de SIGTERM. Le signal n'est actuellement pas envoyé par MagiC lui-même.
|
| 10 SIGBUS |
Erreur de bus : Correspond au vecteur d'exception du même nom
du processeur 68 k. Le signal ne doit pas être ignoré ni intercepté. Dans MiNT, le signal peut être intercepté, c'est-à-dire que le vecteur d'exception
est dévié pour presque tous les processus. Dans MagiC, cependant, cela ne fonctionne pas actuellement, de sorte que deux erreurs d'erreur se produisent systématiquement. Dans MiNT,
SIGBUS, SIGSEGV et SIGPRIV sont réinitialisés à la routine par défaut du système dès la première réception des signaux, de sorte qu'une double erreur bus/adresse/privilège arrête systématiquement le processus.
|
| 11 SIGSEGV |
Violation de segmentation : Correspond à un vecteur d'exception « erreur d'adresse »
du processeur 68 k. Le signal ne doit pas
être intercepté ou ignoré. Dans MiNT, le signal peut être intercepté, c'est-à-dire que le
vecteur d'exception sera dévié pour presque tous les processus. Dans MagiC, cependant, cela ne fonctionne pas actuellement, donc 3 bombes apparaissent systématiquement.
|
| 12 SIGSYS |
Appel système incorrect : Envoyé lorsqu'un argument d'un appel système est incorrect
ou hors limites et que l'appel ne permet pas de signaler l'erreur.
Ce signal n'est pas envoyé par MagiC pour le moment.
|
| 13 SIGPIPE |
Erreur de tube : Envoyé lors d'une tentative d'écriture dans un tube
qui n'existe plus ou qui ne possède plus de lecteurs, et qui peut être masqué dans le protocole glisser-déposer, par exemple. Ce signal n'est pas envoyé par MagiC pour le moment.
|
| 14 SIGALRM |
Alarme : Utilisée par MiNT pour Talarm, elle sert à gérer les dépassements de délai, par exemple. Dans MagiC, ce signal n'est pas envoyé actuellement.
|
| 15 SIGTERM |
Terminer : Requête standard pour que le processus se termine et se ferme ; Envoyé par MiNT, par exemple, lors de la suppression d'un fichier programme dans le répertoire U:\PROC. Actuellement ignoré par MagiC.
|
| 16 SIGURG |
Ce signal n'est actuellement pas défini.
|
| 17 SIGSTOP |
Arrêter : L'action par défaut consiste à suspendre le processus récepteur. Le signal ne peut être ni bloqué, ni intercepté, ni ignoré. Dans MagiC, il provoque la pause de tous les threads d'un processus. En pause,
aucun clic de souris ou de clavier n'est perdu dans MagiC ; au redémarrage du processus avec SIGCONT, tous les messages correspondants sont évalués.
|
| 18 SIGTSTP |
Arrêt du terminal : L'action par défaut est la suspension du processus de réception jusqu'à la réception d'un signal SIGCONT. Ce signal correspond à SIGSTOP et est généralement déclenché par l'utilisateur en appuyant sur la combinaison de touches ^Z. Il ne peut être ni masqué ni intercepté. Le signal n'est actuellement pas envoyé par MagiC et VT52.
|
| 19 SIGCONT |
Continuer : L'action par défaut consiste à reprendre le processus précédemment suspendu par SIGSTOP ou Pause. Bien que le signal ne puisse être ni masqué ni ignoré, il est possible d'installer une routine de gestion pour ce signal. Dans MagiC, tous les threads suspendus par un appel Pause ou un signal SIGSTOP seront réveillés.
|
| 20 SIGCHLD |
Fils terminés : L'action par défaut consiste à ignorer le signal.
Il est envoyé au processus parent à la fois lors de la fin et de la mise en pause d'un processus fils. Dans MiNT, il est possible de configurer ce signal uniquement lors de la fin et de déterminer quel processus fils a été affecté. Comme MagiC ne connaît jusqu'à présent que le Pexec en attente (c'est-à-dire que le parent attend que le fils se termine), ce signal
n'existe pas. Les processus créés avec shel_write ne sont pas de véritables processus fils, mais des processus totalement indépendants. Dans de tels cas, il faut donc attendre l'arrivée d'un message CH_EXIT.
|
| 21 SIGTTIN |
Erreur d'entrée du terminal : L'action par défaut consiste à suspendre
le processus récepteur. En règle générale, un processus tente de lire depuis
un terminal d'un groupe de processus qui ne lui appartient pas. Ce signal
n'est actuellement envoyé ni par MagiC ni par VT52.
|
| 22 SIGTTOU |
Erreur de sortie du terminal : L'action par défaut consiste à suspendre
le processus récepteur. En règle générale, un processus tente de sortir vers
un terminal d'un groupe de processus qui ne lui appartient pas. Ce signal n'est actuellement envoyé ni par MagiC ni par VT52.
|
| 23 SIGIO |
E/S possible : Envoyé pour indiquer que l'entrée/sortie est possible sur un descripteur de fichier.
|
| 24 SIGXCPU |
Limite CPU épuisée : Le temps de calcul contingent défini par Psetlimit ou par les modes étendus shel_write est écoulé. La limitation du temps CPU n'étant pas encore implémentée dans MagiC, ce signal n'est pas envoyé pour le moment sous ce système d'exploitation.
|
| 25 SIGXFSZ |
Limite de taille de fichier dépassée : Envoyé à un processus s'il tente de modifier un fichier de manière à dépasser sa taille maximale.
|
| 26 SIGVTALRM |
Délai expiré : Envoyé à un processus ayant dépassé sa limite de temps maximale.
|
| 27 SIGPROF |
Délai de profilage expiré : Envoyé à un processus pour l'informer que son délai de profilage a expiré.
|
| 28 SIGWINCH |
Fenêtre modifiée : L'action par défaut consiste à ignorer le signal.
Normalement, il est envoyé si la taille du terminal (c'est-à-dire le nombre de lignes ou de colonnes) a changé. Un programme exécuté dans une fenêtre de terminal peut alors se reconfigurer pour s'adapter à la nouvelle taille de la fenêtre. Pour obtenir la taille actuelle de la fenêtre, on peut utiliser les opcodes Fcntl de MiNT, qui ne sont cependant pas encore implémentés dans MagiC. Par conséquent, le signal n'est actuellement envoyé ni par MagiC ni par VT52.
|
| 29 SIGUSR1 |
Défini par l'utilisateur :
|
| 30 SIGUSR2 |
Défini par l'utilisateur : Ces deux signaux peuvent être envoyés par les programmes utilisateur.
Comme un processus est arrêté par défaut à la réception de ce signal, il ne doit être envoyé que si le destinataire est connu.
|
| 31 SIGPWR |
Le système redémarre suite à une panne de courant. |
... Partie non traduite ni incorporée sur MagiC...
|