Comment trouver et arrêter sans risque un processus bloqué dans Bash
Confirmez le processus et son PID, envoyez d’abord SIGTERM, vérifiez le résultat et réservez SIGKILL aux processus qui refusent de s’arrêter.
Démarrer la leçon interactivePour arrêter un processus bloqué sans risque, identifiez-le, confirmez son identifiant de processus (PID) actuel, envoyez le signal normal TERM, puis vérifiez qu’il s’est terminé. Utilisez KILL uniquement si l’arrêt propre a échoué. La leçon sur l’arrêt des processus fournit un processus contrôlé pour pratiquer la commande avant de l’utiliser sur un système réel.
Confirmer le processus avant d’envoyer un signal
Commencez par afficher les processus plutôt que de reprendre un PID copié dans un ancien message :
ps -ef
Lisez le PID avec le propriétaire et la commande complète. Si vous avez déjà un candidat, par exemple le PID 123, limitez l’affichage :
ps -p 123 -o pid,ppid,user,stat,etime,command
Remplacez 123 par le PID que vous venez d’observer. Un identifiant de processus peut être réutilisé après la fin d’un programme ; le numéro seul n’est donc pas une preuve durable. Un service peut aussi avoir plusieurs processus de travail aux noms proches : confirmez lequel est réellement bloqué.
Demander au processus de s’arrêter proprement
Après avoir confirmé un PID positif, envoyez explicitement TERM :
kill -TERM 123
Dans Bash, kill 123 envoie également TERM par défaut. Ce signal demande au programme de s’arrêter et lui laisse la possibilité de fermer ses fichiers, terminer ses écritures et exécuter ses procédures de nettoyage. Attendez un instant, puis vérifiez de nouveau le même PID :
ps -p 123 -o pid,user,stat,command
L’absence de ligne signifie généralement que le processus s’est terminé. S’il reste affiché, il est toujours présent, mais la cause peut être un nettoyage lent, des E/S bloquées, un processus suspendu ou un superviseur qui a lancé un remplaçant. Consultez les journaux et l’état du service avant d’aller plus loin.
Utiliser SIGKILL seulement en dernier recours
Si le processus d’origine existe toujours, ignore TERM et que vous êtes certain de viser la bonne cible, envoyez :
kill -KILL 123
KILL ne peut être ni intercepté ni ignoré. Le système d’exploitation arrête le processus sans laisser l’application effectuer son nettoyage ; des écritures partielles, fichiers temporaires ou processus enfants abandonnés peuvent donc subsister. Ce signal peut mettre fin au processus immédiat, mais ne prouve pas que la cause du problème est corrigée.
Utilisez un PID positif. Les valeurs 0, -1 et les autres nombres négatifs peuvent cibler un groupe de processus ou un ensemble bien plus large. Évitez les commandes générales copiées, comme les motifs pkill, tant que vous ne savez pas exactement ce qu’ils sélectionnent.
Gérer les erreurs de permission et les services qui redémarrent
Le message « Operation not permitted » signifie généralement que le processus appartient à un autre compte ou qu’une politique système le protège. Revérifiez son propriétaire avant d’envisager sudo. Les privilèges d’administration permettent d’exécuter une bonne décision ; ils ne rendent pas sûr un PID incertain.
Si le processus réapparaît immédiatement, un gestionnaire de services ou un orchestrateur de conteneurs le redémarre peut-être. Inspectez ce gestionnaire et les journaux de l’application au lieu d’arrêter sans cesse les processus de remplacement.
Vérification des connaissances
1 / 1Que devez-vous vérifier juste avant d’envoyer un signal ?
Consultez le guide d’affichage des processus si vous avez besoin d’aide pour lire la sortie de ps. Bash documente le signal par défaut et les formes de PID acceptées dans sa référence des commandes intégrées de contrôle des tâches.
Références
Ces liens de documentation fournissent des informations fiables sur les commandes utilisées dans cet article.
À suivre
Filtrer et gérer les processus.