tuer -9 programmes mais ils s'accrochent toujours


11

J'ai essayé de tuer tous mes emplois d'arrière-plan soumis plus tôt sous KUbuntu par

kill -9 $(jobs -p)

Bien que cette commande ait immédiatement donné le message comme

[1] Tué myjob1

[2] Tué myjob2

Je peux toujours voir leurs processus suspendus dans la sortie de top et les utilisations du processeur et de la mémoire ne sont pas modifiées dans la sortie de disponibilité et libre.

Je suppose donc que je ne dois pas les avoir tués correctement. Quelqu'un peut-il expliquer ce qui m'arrive et que dois-je faire?

J'ai trouvé qu'en haut, si tapez k et saisissez le PID, je peux tuer les processus un par un. Alors, est-ce différent de la commande kill?

J'ai également trouvé quelque part en ligne http://www.ruhr.de/home/smallo/award.html pour ne pas recommander de tuer -9

Formulaire d'utilisation inutile de Kill -9

(Citation abomination)

Non non Non. N'utilisez pas kill -9.

Cela ne donne pas au processus une chance de proprement:

1) coupez les connexions des prises

2) nettoyer les fichiers temporaires

3) informer ses enfants qu'il s'en va

4) réinitialiser ses caractéristiques de terminal

et ainsi de suite et ainsi de suite et ainsi de suite.

En général, envoyez 15, et attendez une seconde ou deux, et si cela ne fonctionne pas, envoyez 2, et si cela ne fonctionne pas, envoyez 1. Si cela ne fonctionne pas, RETIREZ LE BINAIRE parce que le programme se comporte mal!

N'utilisez pas kill -9. Ne sortez pas la moissonneuse-batteuse juste pour ranger le pot de fleurs.

Est-ce vrai? Que signifie «envoyer 15», «envoyer 2» et «envoyer 1»? S'agit-il de commandes elles-mêmes ou "kill -15 PID", "kill -2 PID" et "kill -1 PID"?

Merci et salutations!


La suppression du binaire (fichier exécutable) ne tuera pas en soi le processus. Le système de fichiers saura que le processus utilise ce fichier et le laissera "voir" le fichier même après l'avoir supprimé.
Jeppe Stig Nielsen

Réponses:


9

Votre processus est probablement mort mais il apparaît toujours dans l'entrée de la table de processus car il s'agit d'un "processus zombie". Lorsqu'un processus enfant s'est terminé et a complètement disparu (sauf son entrée dans la table de processus) et que le parent ne pouvait pas récupérer son état de terminaison (via l'une des fonctions d'attente), il est appelé zombie ... Tuer (via le signal) un zombie ne veut pas fonctionner car il est déjà terminé. Ce que vous devez faire est de découvrir son processus parent et de tuer thjat one cleany, donc de ne pas utiliser kill - 9

voici deux étapes simples pour tuer un zombie ...

  1. si le parent est encore en vie, essayez de le tuer (ou SIGHUP est tout ce dont vous avez besoin)
  2. si le numéro 1 échoue, il y a un bug dans le noyau .... le redémarrage est votre ami et corrige ce bug: ->

Je soumets mes emplois en ligne de commande et en arrière-plan, quels seraient leurs parents? Et comment puis-je trouver leurs parents le cas échéant?
Tim

Utilisez l' -findicateur de ps pour voir les processus parents.
Jack M.

6

voir man killpour une définition des différents signaux disponibles, mais oui.

  • 15 est SIGTERM et demande à un programme de quitter.
  • 2 est SIGINT et est équivalent à Control-C
  • 1 est SIGHUP et indique que le terminal a raccroché.

Celles-ci informent un processus que l'utilisateur en a terminé avec le processus, bien qu'elles indiquent des raisons quelque peu différentes. 'est en train de faire et de quitter ", SIGHUP signifie simplement que personne n'écoute plus (un processus serveur peut légitimement réagir à SIGHUP en interrompant la sortie de sa console et en continuant de s'exécuter).

  • 9 est SIGKILL , et est spécial en ce qu'il est le seul que le processus ne peut pas attraper et gérer en interne. Il en résulte simplement que le noyau ne revient jamais contrôler le processus, ne lui donnant aucune chance de nettoyer.

en haut, si taper k et saisir le PID je peux tuer les processus un par un. Est-ce que cela équivaut à certaines options de la commande kill?
Tim

Oui, top envoie simplement un signal au processus, de la même manière que kill. AFAICT, le signal par défaut utilisé par top est 15 (SIGTERM).
puetzk


1

Cela signifie taper "kill -1" ou "kill -15" au lieu de taper "kill -9". Kill -9 est une balle inconditionnelle dans la tête de tout processus en cours d'exécution, le tue mort dans un état sale qui peut provoquer des fuites de mémoire, bla bla.

Si vous tapez kill -9 et que cela ne fonctionne pas, je m'assurerais que le processus ne se reproduit pas et que vous avez la permission de tuer ce processus.


À quoi ressembleriez-vous pour vous assurer que le processus ne se reproduit pas? Étant donné que je possède les processus, ai-je la permission de tuer ce processus?
Tim

Le cas échéant, il doit avoir un numéro de processus différent. Donc, si vous faites ps -Al et que vous voyez processA, vous tuez -9 processA, puis faites ps -Al et il y a ENCORE un processA dans la file d'attente de processus, assurez-vous que c'est le MÊME processA, et pas un nouveau.
Satanicpuppy

Et cela vous dira si vous n'avez pas la permission de tuer le processus.
Satanicpuppy

0

Le signal 9 est SIGKILL. L'envoi d'un SIGKILL demande au système d'exploitation de tuer immédiatement le processus, sans poser de questions. Le processus n'est pas notifié à l'avance et n'a aucune chance de se nettoyer après lui-même.

Le signal 15 est SIGTERM. L'envoi d'un SIGTERM demande au système d'exploitation de demander au processus de s'arrêter.

SIGKILL peut être ignoré si le système d'exploitation pense que le processus fait des E / S, ou s'il s'agit d'un zombie (un processus enfant dont le parent n'a pas nettoyé après).

SIGTERM peut être ignoré par l'application, mais il n'est pas recommandé que les applications le fassent, car les systèmes d'exploitation envoient SIGTERM pendant l'arrêt, suivi brièvement par SIGKILL si un programme est toujours en cours d'exécution.

Remarque: La ligne de commande killdemande toujours au système d'exploitation d'envoyer un signal à l'application, ce qu'il peut faire ou non en fonction de qui est propriétaire du processus, etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.