GNU/Linux >> Tutoriels Linux >  >> Linux

Et si "kill -9" ne fonctionne pas ?

J'ai un processus que je ne peux pas tuer avec kill -9 <pid> . Quel est le problème dans un tel cas, d'autant plus que je suis le propriétaire de ce processus. Je pensais que rien ne pouvait échapper à ce kill option.

Réponse acceptée :

kill -9 (SIGKILL) fonctionne toujours, à condition que vous ayez la permission de tuer le processus. Fondamentalement, soit le processus doit être démarré par vous et non setuid ou setgid, soit vous devez être root. Il y a une exception :même root ne peut pas envoyer un signal fatal au PID 1 (le init processus).

Cependant kill -9 n'est pas garanti de fonctionner immédiatement . Tous les signaux, y compris SIGKILL, sont délivrés de manière asynchrone :le noyau peut prendre son temps pour les délivrer. Habituellement, délivrer un signal prend tout au plus quelques microsecondes, juste le temps qu'il faut à la cible pour obtenir une tranche de temps. Cependant, si la cible a bloqué le signal, le signal sera mis en file d'attente jusqu'à ce que la cible le débloque.

Normalement, les processus ne peuvent pas bloquer SIGKILL. Mais le code du noyau le peut et les processus exécutent le code du noyau lorsqu'ils appellent des appels système. Le code du noyau bloque tous les signaux lorsque l'interruption de l'appel système entraînerait une structure de données mal formée quelque part dans le noyau, ou plus généralement la violation d'un invariant du noyau. Donc, si (en raison d'un bogue ou d'une erreur de conception) un appel système se bloque indéfiniment, il se peut qu'il n'y ait effectivement aucun moyen de tuer le processus. (Mais le processus va être tué si jamais il termine l'appel système.)

Un processus bloqué dans un appel système est en veille ininterrompue. Le ps ou top la commande l'affichera (sur la plupart des unix) dans l'état D (à l'origine pour "d isk », je pense).

Un cas classique de veille longue et ininterrompue est celui des processus accédant aux fichiers via NFS lorsque le serveur ne répond pas; les implémentations modernes ont tendance à ne pas imposer de veille ininterrompue (par exemple sous Linux, le intr L'option de montage permet à un signal d'interrompre les accès aux fichiers NFS).

Si un processus reste en veille ininterrompue pendant une longue période, vous pouvez obtenir des informations sur ce qu'il fait en lui attachant un débogueur, en exécutant un outil de diagnostic tel que strace ou dtrace (ou des outils similaires, selon votre version Unix), ou avec d'autres mécanismes de diagnostic tels que /proc/PID/syscall sous Linux. Voir Impossible de tuer le processus wget avec `kill -9` pour plus de détails sur la façon d'enquêter sur un processus en veille ininterrompue.

En relation :Comment fonctionne la licence pour le framework open source LGPL ?

Vous pouvez parfois voir des entrées marquées Z (ou H sous Linux, je ne sais pas quelle est la distinction) dans le ps ou top production. Techniquement, ce ne sont pas des processus, ce sont des processus zombies, qui ne sont rien de plus qu'une entrée dans la table des processus, conservée afin que le processus parent puisse être informé de la mort de son enfant. Ils disparaîtront lorsque le processus parent prêtera attention (ou mourra).


Linux
  1. Qu'est-ce que NGINX ? Comment ça marche?

  2. Pourquoi la substitution de processus Bash ne fonctionne-t-elle pas avec certaines commandes ?

  3. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

  4. Pourquoi `exit &` ne fonctionne pas ?

  5. Qu'est-ce que le DNS et comment ça marche ?

Que signifie la sortie de Ps ?

Qu'est-ce que cette statistique de processus indique ?

Comment fonctionne un équilibreur de charge ? Qu'est-ce que l'équilibrage de charge ?

Qu'est-ce qui a tué mon processus et pourquoi ?

Comment ça marche ? Que fait rm ?

Que fait kill -- -0 ?