Arrêter un processus Linux
T'I/O
La gestion des entrées/sorties a toujours été le point faible des systèmes d'exploitation.
Bien que de meilleur qualité que certains OS grands publiques, Linux n'échappe pas à ce dogme. Les problèmes d'I/O peuvent être source de comportements inattendus : un service qui se bloque ou refuse de s'arrêter ou des processus zombies.
A la clé, vous pouvez penser redémarrer un service avec une nouvelle configuration mais en fait vous utilisez toujours l'ancienne. Fun party en perspective...
Cet article présente une approche pour arrêter un service bloqué par un problème d'I/O sous Linux.
L'arrêt de service
La meilleure façon d'arrêter un service est d'utiliser le script de gestion du service mise au point par le concepteur.
Les scripts de gestion de services sont localisés sous /etc/init.d/
Par exemple pour arrêter votre serveur Apache, lancez la commande :
# /etc/init.d/apache2 stop
Pour vérifier que le service Apache est bien arrêté, exécutez la commande :
$ pgrep -l apache2
Si il reste des process actif, passez au chapitre suivant pour forcer l'arrêt.
La demande d'arrêt immédiat kill -9
L'arrêt normal d'un service envoie souvent un message kill -TERM ou kill -15. Le service est alors prié de déclencher sa procédure d'arrêt.
Mais en cas de contexte imprévu par le développeur, ce signal peut être ignoré.
Vous allez alors envoyer un signal d'arrêt immédiat : kill -KILL ou kill -9
# pkill -9 apache2
Normalement, le processus s'arrête immédiatement en libérant ses ressources. Ce signal est rarement bloqué mais il peux arriver que le système verrouille le handle du service sur un I/O, empêchant tout autre processus d'interrompre son fonctionnement, la commande kill incluse. Dans ce cas, le résultat est incertain. Le process peut devenir un zombie, moitié mort, moitié vivant. Pour vérifier que le service Apache est bien arrêté, exécutez la commande :
$ pgrep -l apache2
Si il reste des process actif, passez au chapitre suivant pour forcer l'arrêt.
L'arrêt des communications réseaux
Premier cas, votre service a ouvert un flux réseaux. Votre protocole, peu robuste, a verrouillé le flux, interdisant l'arrêt du daemon.
Pour identifier les flux ouverts du type , exécutez la commande :
# netstat -v -a
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
tcp 0 0 localhost:mysql *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 localhost:953 *:* LISTEN
tcp6 0 0 [::]:www [::]:* CLOSING
tcp6 0 0 [::]:domain [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
Cette sortie indique qu'un process sur le port 80 (www) tente de fermer sa socket.
Si cette situation dure, vous pouvez tenter de redémarrer le réseau nécessaire au fonctionnement de Apache afin de forcer la fermeture dans l'état de ce flux.
# /etc/init.d/networking stop
# pkill -9 apache2
# /etc/init.d/networking start
# pgrep -l apache2
Si le processus Apache n'est toujours pas mort, nous pouvons vérifier la mémoire partagée ou mémoire sémaphore.
L'arrêt des communications mémoires inter-processus
Deuxième cas, votre service utilise une zone mémoire partagée, une file de messages ou une sémaphore. Lancez la commande :
# ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 0 www-data 600 1
0x00000000 262152 www-data 600 1
------ Message Queues --------
key msqid owner perms used-bytes messages
Dans cet exemple, l'utilisateur www-data, qui est le propriétaire du service apache2, utilise 2 sémaphores. Vous allez les supprimer, puis demander l'arrêt du daemon apache2 :
# ipcrm -s 0 -s 262152
# pkill -9 apache2
# pgrep apache2
Si le process Apache tourne encore, passez au chapitre suivant.
Le redémarrage du serveur Linux
Situation exceptionnelle, bug du noyau Linux, vous êtes contraint de redémarrer votre serveur pour un retour à la normal.
Sauvegardez vos fichiers et lancez la commande suivante :
# shutdown -r now
Votre serveur lance la procédure de redémarrage et tout rentre dans l'ordre.
- Ajouter un commentaire
- 9146 lectures

™ 