|
|
7.7 Suppression d’un processus
- Généralement un processus se
termine à la fin de l’exécution de la dernière instruction; il est
alors détruit par le système
d’exploitation.
- Un utilisateur peut terminer un processus en avant-plan en
tapant CTRL−C.
- Un utilisateur peut aussi terminer un processus avec la
commande kill envoyant un
« signal » à un processus.
- Par défaut, la commande kill envoie le signal 15 de
terminaison (SIGTERM).
- La commande kill peut aussi
forcer la terminaison d’un processus en envoyant le signal 9 de destruction (SIGKILL).
- La commande GNU/Linux killall envoie un signal à tous les processus de même
nom.
- Notez que le droit de
détruire un processus est réservé à son
propriétaire.
previous next
Commentaires de cette page
dans le polycopié de cours
Nous ne pouvons pas proposer d’illustration interactive en mode commande
pour la suppression de processus. Veuillez suivre les instructions
suivantes:
- Le cas d’utilisation de suppression d’un
processus est très simple et évident à comprendre. Nous avons lancé une
commande (par exemple, notre nouveau programme écrit en C qui boucle à l’infini ou la commande sleep 5000). Nous voulons interrompre l’exécution de
cette commande « erronée » sans utiliser les touches CTRL−C (par exemple, parce que le processus est lancé en
arrière-plan).
- Lançons un processus en arrière-plan: sleep 5000&
Le processus n’est pas interruptible par la combinaison de touches
CTRL−C.
- Obtenons le numéro du processus avec la commande
ps
Le premier champ de la ligne est le numéro de processus (PID). Soit 5543 le numéro
du processus.
- Supprimons le processus avec la commande kill: kill 5543
Il est possible de fournir plusieurs arguments et ainsi supprimer plusieurs
processus en une seule opération.
- Relançons un processus en arrière-plan: sleep 5000&
- Le numéro de job est
obtenue avec la commande jobs
Soit 4 le numéro du job de ce processus.
- Supprimons le processus avec la commande kill %4
De même, il est possible de fournir plusieurs arguments et ainsi supprimer
plusieurs processus en une seule opération.
- Essayons maintenant de supprimer un processus qui ne nous
appartient pas. Cherchons un de ces processus avec la commande ps -ael
Prenons le processus init de numéro
1.
- Essayons avec la commande kill
1
Il est heureux que l’opération ne soit pas permise par un utilisateur
autre que le propriétaire. Autrement, nous pourrions agir sur les processus des
voisins et les arrêter par exemple (:-().
- Les pages du manuel en ligne de la commande kill indiquent que par défaut le signal envoyé est le
signal SIGTERM (numéro 15) de terminaison.
Certaines applications « attrapent » ce signal et ne terminent pas
lorsqu’elles le reçoivent. Le signal SIGKILL (numéro 9) force la terminaison. Lançons une
dernière fois plusieurs processus en arrière-plan: sleep 5000& puis sleep
5000& et enfin sleep 5000&
Notez que l’écriture avec des « ; » ne fonctionne pas: vous pouvez essayer
sleep 5000 ; sleep 5000 ; sleep 5000 &
La première commande est lancée en avant-plan.
ou
sleep 5000 & ; sleep 5000 & ; sleep 5000
&
Le shell renvoie une erreur de syntaxe avec le « ; ».
- Soit 3334, 3335 et 3336 les numéros
des processus créés. Supprimons le premier processus avec la commande
kill en donnant le numéro du signal:
kill -9 3334
Dans la pratique, pour être sûr de supprimer un processus, il est raisonnable
d’envoyer le signal numéro 9.
- Supprimons les processus de nom de commande sleep avec la commande killall: killall sleep
Tous les processus non suspendus, nous appartenant et de nom de commande
sleep sont supprimés.
- Vérifions qu’il ne reste plus de commande
sleep en cours d’exécution avec la
commande ps.
INF, Télécom SudParis, CSC 3001,
Sept. 2014
|
|