"Linux" -Comment terminer le processus? @ 20210121

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":

 

Processus orphelin: un processus parent se termine alors qu'un ou plusieurs de ses processus enfants sont toujours en cours d'exécution, ces processus enfants deviendront alors des processus orphelins. Le processus orphelin sera adopté par le processus d'initialisation (le numéro de processus est 1), et le processus d'initialisation terminera le travail de collecte d'état pour eux.

 

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

Je suppose que tu aimes

Origine blog.csdn.net/u013670453/article/details/112944572
conseillé
Classement