Un programme se bloque : que faire ?
Un processus est un programme en train de tourner. Sur un serveur, des dizaines tournent en même temps, et certains se bloquent.
Un technicien doit savoir les trouver et les arrêter. Il doit aussi savoir démarrer un service, un programme qui tourne en permanence.
À la fin de cette leçon
Remarque
Je peux trouver et arrêter un processus, et démarrer ou arrêter un service.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Processus | un programme en train de tourner | |
| PID | le numéro qui identifie un processus | 4218 |
| Signal | un message envoyé à un processus | |
| Service | un programme qui tourne en permanence, démarré par le système | |
| systemd | le programme qui démarre et surveille les services |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Avant de commencer
Remarque
Appuie sur Start the lab dans la barre en haut et attends que la machine soit prête. Ce lab fait tourner deux processus à arrêter, lab-worker et lab-stubborn, et un petit serveur web, lab-web.
Chaque processus a un numéro, le PID
Quand un programme démarre, le système crée un processus et lui donne un numéro, le PID. Deux processus peuvent avoir le même nom, mais jamais le même PID.
pgrep -f mot cherche les processus dont la commande contient ce mot. pgrep -c en donne le nombre. ps aux les liste tous, et top les montre en direct : on le quitte avec la touche q.
Compte les processus lab-worker
pgrep -c -f lab-workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
kill envoie un signal à un processus
Pour arrêter un processus, on lui envoie un signal avec kill suivi de son PID. Par défaut, le signal demande poliment de s'arrêter. Le programme peut l'accepter ou l'ignorer.
Le signal 9, écrit kill -9, ne se discute pas : le système arrête le programme tout de suite. On l'utilise en dernier.
Deux signaux à connaître
| Commande | Signal | Effet |
|---|---|---|
| kill 4218 | 15, par défaut | demande de s'arrêter proprement |
| kill -9 4218 | 9 | arrête tout de suite, sans prévenir |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Arrête lab-worker poliment
kill $(pgrep -f lab-worker)Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Est-il encore là ?
pgrep -c -f lab-workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Essaie la même chose sur lab-stubborn
kill $(pgrep -f lab-stubborn)Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Est-il encore là ?
pgrep -c -f lab-stubbornAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Arrête-le avec le signal 9
kill -9 $(pgrep -f lab-stubborn)Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérifie qu'il a disparu
pgrep -c -f lab-stubbornAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent que kill tue toujours le processus. Non : kill envoie une demande, et un programme peut l'ignorer. Vérifie avec pgrep. Utilise kill -9 seulement si la demande polie échoue, car le programme n'a plus le temps de sauvegarder.
Un service est géré par systemd
Un service est un programme que le système démarre avec la machine et garde en route. Un serveur web ou une base de données en sont. Le gestionnaire s'appelle systemd, et on le pilote avec systemctl.
sudo systemctl stop nom arrête un service et sudo systemctl start nom le démarre. systemctl is-active nom dit s'il tourne. sudo prête les droits de l'administrateur pour une commande.
Arrête le service lab-web
sudo systemctl stop lab-webAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Tourne-t-il encore ?
systemctl is-active lab-webAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Redémarre-le
sudo systemctl start lab-webAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Tourne-t-il de nouveau ?
systemctl is-active lab-webAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.