Description du problème
Cet article a été compilé à l'origine pour la commande ExecStop dans le fichier d'unité de service de systemd. Plus tard, quand je regarde le document systemd, il dit que lorsque l'arrêt est exécuté, après l'exécution de la commande ExecStop, le processus inachevé sera terminé par systemd.
Il n'y a rien à écrire, utilisez simplement la commande kill (1) pour terminer le processus. Cependant, il y a plusieurs questions intéressantes:
1) Comment terminer tous les processus enfants d'un processus?
2) Comment terminer un processus et ses processus enfants?
3) Que dois-je faire si je veux mettre fin au processus d'un certain groupe ou d'un certain utilisateur?
En général, lorsqu'un processus est arrêté, ses processus enfants ne se terminent pas nécessairement et le processus enfant peut devenir un "processus orphelin":
Alors parfois, nous devons mettre fin à un processus et à ses processus enfants.
Commençons par les bases.
Selon le numéro de processus, terminez le processus
Sous Linux, si vous souhaitez terminer un processus, vous pouvez directement utiliser la commande kill (1) et spécifier l'ID de processus (PID). Par exemple, si nous voulons terminer le processus avec le PID 3219, il suffit d'exécuter la commande suivante:
tuer -9 3219 tuer-tuer 3219
Les deux commandes ci-dessus sont équivalentes à 100%, mais la forme est différente. Veuillez vous référer au manuel de kill (1) pour plus de détails. La seule chose à noter: Dans Shell, la commande kill intégrée, veuillez vous référer à la section "Notes".
Selon le numéro de processus parent, terminer le processus enfant
Si vous souhaitez mettre fin à tous les ID de processus enfants du processus, vous pouvez utiliser la commande pkill (1). Par exemple, si nous voulons terminer le processus enfant du processus avec le PID 3219, il suffit d'exécuter la commande suivante:
pkill -KILL -P 3219
Cette commande peut mettre fin à tous les processus enfants d'un processus.
Mettre fin au processus et à tous ses enfants
Première méthode, utilisez le groupe de processus
Vous pouvez utiliser la commande kill (1) ou pkill (1) pour terminer le processus avec l'ID du "groupe de processus". Par exemple, l'ID du groupe de processus est 4536 comme suit:
tuer -KILL -4536 pkill -KILL -g 4536
Notez que "4536" est ici l'ID du "groupe de processus", pas l'ID de processus, pas l'ID de processus parent, ni l'ID du groupe auquel appartient le processus. Il existe un nom appelé "Groupe de processus". Vous pouvez utiliser la commande suivante pour comprendre la différence entre l'ID de groupe (gid), l'ID de groupe de processus (pgid) et les autres ID. Faites attention à la sortie de chaque champ:
ps -o pid, ppid, pgid, gid, sess, cmd -U racine
Les ID ci-dessus sont l'ID de processus, l'ID de processus parent, l'ID de groupe de processus, l'ID de groupe de processus, la session et la commande.
Méthode deux, utilisez une petite commande shell
Mais la commande suivante doit être exécutée une fois pour toutes:
tuer -KILL $ (ps -o pid = --pid 6234 --ppid 6234)
La commande ci-dessus met fin à tous les processus avec l'ID de processus 6234 et ses processus enfants.
Terminer le processus basé sur GID
Si vous souhaitez terminer un processus appartenant à un groupe, vous pouvez utiliser la commande pkill (1). Comme suit, terminez tous les processus avec le GID 34:
pkill -KILL -G 34 pkill -KILL -G mail
Terminez tous les processus du groupe avec le GID 34. Au nom de, la valeur GID 34 peut également être remplacée par le nom du groupe. Les deux commandes ci-dessus sont équivalentes, car le nom de groupe avec le GID 34 est "mail".
Terminer le processus selon le terminal
Vous pouvez utiliser la commande pkill (1) pour terminer le processus en fonction du terminal sous / dev /:
pkill -9 -t 'pts / 4'
Terminez le processus dont le terminal est "pts / 4" sans le préfixe "/ dev /". Mais ceci n'est applicable qu'au processus du terminal associé. Certains processus d'arrière-plan ne sont pas associés au terminal.
Terminez le processus en fonction du nom du processus
Vous pouvez utiliser la commande pkill avec le nom du processus pour terminer le processus. L'exemple suivant termine le processus nommé "xterm":
pkill -KILL -x "xterm"
Terminez le processus en fonction de la session
La commande pkill est toujours utilisée pour terminer le processus. L'exemple suivant termine tous les processus avec le numéro de session 1256:
pkill -KILL -s 1256
Tuer les processus de zombies
Autre moyen de tuer un processus zombie - Unix & Linux Stack Exchange
Linux - Comment tuer un processus zombie - Stack Overflow
Comment trouver un processus zombie? - Demandez à Ubuntu
Localisez le processus zombie comme suit:
ps aux | grep 'Z'
Terminez le processus zombie par la méthode suivante:
// Envoie un signal CHID au processus parent (mais il peut échouer car le processus parent peut ne pas gérer correctement le signal CHLD) kill -CHLD <PPID> // Ou, en mettant fin au processus parent, terminer le processus zombie kill -KILL <PPID>
Précautions
La commande kill intégrée au Shell
Dans Shell (tel que BASH), il peut avoir une commande kill intégrée. Vous pouvez utiliser la commande type -a kill pour afficher:
# type -a kill kill est un shell intégré kill est / bin / kill
Si la première ligne de sortie est " kill is a shell builtin ", cela signifie que la commande kill que vous exécutez est la commande kill intégrée dans Shell, pas la commande kill (1) dans le paquet util-linux. L'utilisation de la commande kill intégrée dans Shell doit vérifier la documentation du shell que vous utilisez, donc je ne développerai pas l'explication ici. Si vous voulez utiliser la commande kill (1) dans le paquet util-linux, vous pouvez utiliser "chemin absolu" (/ bin / kill ...) ou "env" (env kill ...) pour l'exécuter. Une autre chose à noter est que le paquet procp-ng fournit également la commande kill, donc quel paquet la commande kill est-elle utilisée? Cela nécessite votre propre jugement, mais vous ne pouvez pas vous tromper avec le manuel. L'utilisation de ces commandes kill est similaire, il n'y a donc rien à craindre.
À propos du signal -KILL (-9)
Si vous êtes préoccupé par l'intégrité des données, n'utilisez pas le signal -KILL (-9), il tuera directement le processus. Tous les processus sains devraient gérer le signal -TERM (-15) pour notifier au processus de se terminer.
références
WikiNotes / Comment terminer le processus?
Processus orphelins et processus zombies (ce n'est pas la première fois que je me réfère à cet article)
Moyens de tuer les processus parents et enfants en une seule commande
Désactivation des noms de colonne dans la sortie ps