Bonjour,
Dans mon manuel, man 2 kill précise que l'on ne peut pas envoyer de signaux au processus de pid 1 (init), qui ne possède pas de gestionnaire de signaux, et ce afin d'éviter tout risque d'arrêt intempestif du système.
man init, quant à lui, décrit en détail les réactions d'init aux signaux SIGHUP, SIGUSR1, SIGINT et SIGWINCH.
Est-ce que quelqu'un peut m'expliquer?
# Réponse
Posté par Pinaraf . Évalué à 1.
Le man init décrit le comportement du sys v init, le sysvinit inclue un gestionnaire de signaux, donc c'est lui qui les intercepte pas le noyau comme le dit le man 2 kill (sinon merci de me signaler le man init, j'fé un init et apparemment y a des choses qui pouraient m'intéresser)
[^] # Re: Réponse
Posté par CoinKoin . Évalué à 2.
Pour ce qui est de faire un init, je te signale que j'essayais justement moi aussi d'en faire un, et voici ce que j'ai noté :
Il y a largement assez de signaux, sous Linux, pour communiquer tous les messages (telinit 0,1,2,3,4,5,6,7,8,9,a,b,c, s ou S, q ou Q, u ou U) à init, avec un seul signal par message. En revanche, il est bien nécessaire d'utiliser une fifo pour passer le paramètre éventuel de telinit -t . Le problème sur lequel je bute actuellement est de savoir ce qu'il faut faire lorsque devfs n'est pas monté, puisque la fifo est sensée être /dev/initctl.
Bonne chance!
# Faut tout lire
Posté par 007 . Évalué à -3.
It is impossible to send a signal to task number one, the init process,
Par défaut il n'y a pas de gestionnaire de signaux pour init. Libre à init de l'installer.for which it has not installed a signal handler. This is done to
assure the system is not brought down accidentally.
[^] # Re: Faut tout lire
Posté par daggett . Évalué à 4.
(En fait c'est carrément un cas particulier géré par le kernel, qui empeche de transmettre SIGKILL au processus de pid 1)
[^] # Re: Faut tout lire
Posté par 007 . Évalué à 1.
Par contre, tu as raison, les signaux SIGKILL et SIGSTOP ne peuvent normalement être ignoré par un processus et c'est donc le noyau qui inihibe ces signaux pour init. C'est un cas particulier de init (une fois qu'il a installé un gestionnaire de signaux).
[^] # Re: Faut tout lire
Posté par CoinKoin . Évalué à 2.
(Il faudrait peut-être modifier la page de man 2 kill à ce sujet, mais là, je ne vois pas trop à qui faire un rapport de bogue... :))
[^] # Re: Faut tout lire
Posté par 007 . Évalué à 0.
...
Tu peux les envoyer. Mais init (grâce à son cas particulier de ne pas voir d'handler de signaux par défaut) peut les ignorer. C'est différent. Je ne dis pas que c'est comme ça que c'est implémenté ! Peut-être qu'effectivement le noyau ne fait pas suivre les signaux SIGKILL ou SIGSTOP. J'en sais rien et à la limite je m'en fous. Le processus init n'a pas à être tué ou arrêté.
man 7 signal
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
Mais comme init n'a pas d'handler de signaux par défaut, ce n'est pas applicable.
> Il faudrait peut-être modifier la page de man 2 kill à ce sujet, mais là, je ne vois pas trop à qui faire un rapport de bogue...
Il n'y a pas de bug dans la doc !
Il faut bien peser chaque terme et comprend comme ça marche.
btw, utilises la doc en anglais quand tu as un doute. Exemple :
$ env LANG=C man 7 signal (si t'as la doc anglaise d'installée)
[^] # Re: Faut tout lire
Posté par CoinKoin . Évalué à 2.
Pourtant, si je cite ton premier commentaire, il y a bien, dans le man 2 kill, la phrase :
It is impossible to send a signal to task number one, the init process, for which it has not installed a signal handler
qui, en bon français, donne "il est impossible d'envoyer un signal au processus numéro 1, le processus init, pour lequel aucun gestionnaire de signal n'a été installé" (Par qui? Je ne sais pas qui est le "it" du texte anglais, mais je suppose que c'est le kernel qui n'a pas placé ce gestionnaire).
De toutes façons, cela ne change rien, puisque la première partie de la phrase dit bien qu'il est impossible d'envoyer un signal à init, et que la suite de la phrase n'est pas une réserve, mais une simple précision technique.
Donc, à mon avis, il y a bel et bien un bogue.
[^] # Re: Faut tout lire
Posté par 007 . Évalué à 0.
Tu interprètes cette phrase comme équivalente à :
- It is impossible to send a signal to task number one, the init process
Le reste, n'est pas là pour rien.
[^] # Re: Faut tout lire
Posté par CoinKoin . Évalué à 2.
[^] # Re: Faut tout lire
Posté par 007 . Évalué à 0.
Fais un rapport de bug.
[^] # Re: Faut tout lire
Posté par CoinKoin . Évalué à 2.
"Les seuls signaux que l'on peut envoyer au processus de pid 1(init) sont ceux pour lesquels ce processus a expressément créé un gestionnaire de signaux".
Bon, cela dit, je pense que je fais quand même faire un rapport de bogue. Pour erreur de traduction dans la version française du man, et peut-être aussi pour manque de clarté de la version anglaise.
Finalement, c'est toi qui avait raison, 007. Merci!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.