Bonjour
Voici un 3ème avis.
La question initialement posée peut conduire à une réponse de plusieurs pages...
Elle touche un sujet important qui mériterait de sortir ce fil du chapitre dreambox 8000, puisqu'il concerne toute machine à base d'unix et même toute machine dont le noyau est interfacé POSIX.
Je tente d'être bref et imagé. Dans un contexte multitâche, les processus interagissent au sein d'une même famille de processus. L'une des méthodes de communication, simple et peu couteuse, est l'utilisation des signaux qui sont des évènements que je vais assimiler à des fléchettes. Il existe plusieurs couleurs de fléchettes.
Deux règles simples pour comprendre l'interaction:
- quand on dit (abusivement) qu'un processus P1 envoie un signal à un processus P2, celà signifie que P1 demande au noyau d'émettre le signal en direction du processus P2; pour celà P1 utilise une primitive du noyau.
- on choisit la couleur de la fléchette (la valeur du signal notée SIGxxxx) en fonction de l'effet désiré. Le nombre de valeurs différentes est variable suivant les NOYAUX (30 sur la PoD de mai 2010).
Exemples d'évènements à l'origine de l'émission de signaux vers un processus: changement de la taille de la fenêtre de l'application, exécution d'une instruction illégale, tentative de visite d'une mémoire non autorisée, temporisation terminée, synchronisation avec un autre processus ayant terminé un certain travail, décès d'un processus enfant, tentative d'avortement du processus courant par l'opérateur (CTRL/C par exemple), endormissement du processus, réveil, ...
Comme son nom ne l'indique pas, la commande kill va permettre à un opérateur (ou à un script) de simuler l'un des évènements cités pour le processus visé par la fléchette; cette commande permet donc FACILEMENT de tester le comportement du processus lorsqu'il survient un tel évènement.
Que se passe-t-il coté processus?
1) si le processus est lié à une application manipulant des données importantes(enregistrement, sauvegardes,..) ou du matériel extérieur lié à la machine, l'application doit les préserver en gérant les fléchettes dangereuses pour sa survie; celà se fait en écrivant une fonction bouclier (appelée handler du (ou des) signal). Chaque fléchette de couleur donnée sera traitée par sa fonction bouclier.
C'est ici qu'intervient la couleur 9 (SIGKILL). Cette fléchette est imparable et tout processus la recevant sera irrémédiablement tué et ôté de la table des processus en cours. En outre, ses données ne seront pas sauvegardées, ses processus enfants vont devenir orphelins et devront être recueillis par l'ancêtre (PID:1), ...
Je suis de l'avis de Parodin sur ce sujet, si on souhaite terminer un processus, il vaut mieux le faire proprement en demandant au processus de se terminer lui-même (suicide), il veillera ainsi au salut préalable de ses données et à l'extermination de sa progéniture.
2) si l'application ne contient pas de fonction bouclier, suivant la couleur de la fléchette, le processus va
soit se terminer brutalement
soit ignorer la fléchette
soit s'endormir (debug pas à pas)
soit se réveiller
Pour certains signaux, le moyau va créer un fichier core qui est l'image de l'application au moment de sa mort; sa lecture permet de connaître la cause de son décès ( la couleur de la flèche mortelle).
Si ma réponse est trop longue, j'accepte volontiers qu'elle soit gommée...
Dirac