Chaque fois qu'un processus est créé dans un système Linux, il reçoit un nouveau numéro qui l'identifie auprès d'autres applications. Il s'agit de l'ID de processus, ou PID, et il est utilisé dans tout le système pour gérer les processus en cours d'exécution.
Comment fonctionnent les processus sous Linux
Le premier processus exécuté par Linux est appelé systemd
, qui reçoit le PID 0. Tous les autres processus sont générés en tant qu'enfants de systemd
. Les premiers seront généralement des éléments Linux de bas niveau dont vous n'aurez pas à vous soucier, mais plus loin dans l'arborescence, le système commencera à lancer des processus au niveau de l'utilisateur comme MySQL et Nginx.
Chaque processus a également un PPID, qui stocke le PID du parent par lequel le processus a été créé. Il existe également un processus TTY, qui stocke l'ID du terminal que vous avez utilisé pour lancer le processus, et l'UID, qui stocke l'ID de l'utilisateur qui l'a créé. Tout processus manquant un TTY est généralement appelé un démon, un terme utilisé pour désigner les processus système s'exécutant en arrière-plan qui n'ont pas de terminal de contrôle.
Chaque fois qu'un processus se ferme, ce PID est alors disponible pour un autre processus à utiliser. Chaque processus se ferme également avec un code de sortie, généralement utilisé pour indiquer si une erreur s'est produite ou non. Le code de sortie 0 est une sortie propre, tout ce qui est supérieur est une erreur spécifique.
Sur une note plus technique, les PID sont une partie importante des espaces de noms Linux. Les espaces de noms masquent certaines parties du système des processus s'exécutant dans différents espaces de noms, ce qui alimente les outils de conteneurisation comme Docker. Avec les espaces de noms, l'arborescence PID est coupée à une certaine branche, et seule cette branche est donnée au processus conteneurisé. Cette branche redémarre à partir du PID 1, elle apparaît donc au conteneur comme si elle s'exécutait dans une installation Linux entièrement nouvelle.
Affichage des processus
Pour obtenir une liste complète des processus, vous pouvez exécuter le ps
commander:
sudo ps -e
Ce qui produira une très longue liste de tous les processus en cours, ce qui est certes un peu difficile à parcourir.
Vous pouvez filtrer les résultats en redirigeant la sortie vers grep
, comme ps
n'a pas de fonction de recherche intégrée:
sudo ps -e | grep "nom du processus"
Bien que vous deviez être averti que, assez curieusement, cela correspondra également au nouveau grep
processus, comme ps
affiche les arguments de commande, qui incluent votre chaîne correspondante, qui correspond évidemment à elle-même. Si vous avez juste besoin du PID d'un nom de processus donné, le pgrep
La commande renvoie simplement le PID et rien d'autre.
Un visualiseur beaucoup plus utile est le Haut
commande, qui agit comme un gestionnaire de tâches depuis votre terminal. Il montre tous les processus classés par utilisation du processeur, ainsi que certaines statistiques générales du système:
Si vous utilisez un bureau Linux, cela montre également les applications en cours d'exécution, bien que la plupart des applications se multithread elles-mêmes, d'où la raison pour laquelle cette liste est remplie par Google Chrome s'exécutant sur plusieurs processus avec différents PID.
Arrêt des processus
En réalité, vous ne ferez pas grand-chose avec le processus réel autre que de le désactiver, car vous n'aurez pas à gérer la création de processus. (Elle est gérée automatiquement lorsque vous exécutez une commande ou un script.) La commande pour ce faire est nommée succinctement tuer
, qui prend un PID donné et arrête ce processus:
sudo tuer 40589
Vous pouvez également tuer tous les processus avec un nom donné en utilisant le tuer tous
commander. Par exemple, pour libérer de la RAM sur votre système, vous pouvez exécuter:
sudo killall chrome
De toute évidence, ce n’est pas la meilleure façon de fermer les applications de bureau, mais la plupart des processus ne poseront pas trop de problème en fermant de cette façon.
Cependant, si le processus est un service Linux, vous souhaiterez plutôt utiliser le un service
commande d'interagir avec lui. Par exemple, recharger nginx:
rechargement du service nginx
Ou désactivez-le:
service nginx arrêt
Fichiers PID
Un ID de processus n'identifie de manière unique un processus que tant que ce processus est en cours d'exécution. Si vous devez redémarrer Nginx, un nouvel ID de processus peut lui être attribué.
C'est là que les fichiers PID entrent en jeu; il s’agit d’une forme de communication inter-processus, essentiellement un fichier qui stocke le PID actuel d’un processus donné. Un autre processus peut lire ce fichier et connaître intrinsèquement, par exemple, quel est le PID de MySQL. Lorsque MySQL démarre, il écrit son propre PID dans ce fichier pour que tout le système puisse le voir.
Habituellement, les fichiers PID sont stockés dans / var / run /
, bien que ce ne soit qu'une pratique courante et non obligatoire, de la même manière que les fichiers journaux sont stockés dans / var / log /
.
La plupart des processus avec des fichiers PID n'en auront qu'un seul à la fois, ce qui se fait à l'aide de fichiers de verrouillage. Les fichiers de verrouillage sont un moyen de définir un indicateur qui ne permet qu'un seul processus à la fois. Lorsqu'un processus comme Nginx démarre, il vérifie si le fichier de verrouillage existe, et si ce n'est pas le cas, il procédera au lancement normalement. Mais s'il est déjà là, Nginx lancera une erreur et refusera de démarrer.