Recherche de site Web

Tout ce que vous devez savoir sur les processus sous Linux [Guide complet]


Dans cet article, nous passerons en revue une compréhension de base des processus et examinerons brièvement comment gérer les processus sous Linux à l'aide de certaines commandes.

Un processus fait référence à un programme en exécution ; c'est une instance en cours d'exécution d'un programme. Il est composé d'instructions de programme, de données lues à partir de fichiers, d'autres programmes ou d'entrées d'un utilisateur du système.

Types de processus

Il existe fondamentalement deux types de processus sous Linux :

  • Processus de premier plan (également appelés processus interactifs) : ils sont initialisés et contrôlés via une session de terminal. En d’autres termes, il doit y avoir un utilisateur connecté au système pour démarrer de tels processus ; ils n’ont pas démarré automatiquement dans le cadre des fonctions/services du système.
  • Processus d'arrière-plan (également appelés processus non interactifs/automatiques) : ce sont des processus non connectés à un terminal ; ils n’attendent aucune contribution de l’utilisateur.

Qu'est-ce que les démons

Il s'agit de types spéciaux de processus en arrière-plan qui démarrent au démarrage du système et continuent de s'exécuter indéfiniment en tant que service ; ils ne meurent pas. Elles sont démarrées spontanément en tant que tâches système (exécutées en tant que services). Cependant, ils peuvent être contrôlés par un utilisateur via le processus init.

Création d'un processus sous Linux

Un nouveau processus est normalement créé lorsqu'un processus existant fait une copie exacte de lui-même en mémoire. Le processus enfant aura le même environnement que son parent, mais seul le numéro d'identification du processus est différent.

Il existe deux manières conventionnelles de créer un nouveau processus sous Linux :

  • Utilisation de la fonction System() – cette méthode est relativement simple, cependant, elle est inefficace et comporte des risques de sécurité très certains.
  • Utilisation des fonctions fork() et exec() – cette technique est un peu avancée mais offre une plus grande flexibilité, vitesse et sécurité.

Comment Linux identifie-t-il les processus ?

Étant donné que Linux est un système multi-utilisateurs, ce qui signifie que différents utilisateurs peuvent exécuter différents programmes sur le système, chaque instance en cours d'exécution d'un programme doit être identifiée de manière unique par le noyau.

Et un programme est identifié par son ID de processus (PID) ainsi que par son ID de processus parent (PPID). Par conséquent, les processus peuvent être classés en :

  • Processus parents : ce sont des processus qui créent d'autres processus pendant l'exécution.
  • Processus enfants : ces processus sont créés par d'autres processus pendant l'exécution.

Le processus d'initialisation

Le processus Init est la mère (parent) de tous les processus du système, c'est le premier programme exécuté au démarrage du système Linux ; il gère tous les autres processus du système. Il est démarré par le noyau lui-même, donc en principe il n'a pas de processus parent.

Le processus d'initialisation a toujours l'ID de processus 1. Il fonctionne comme un parent adoptif pour tous les processus orphelins.

Vous pouvez utiliser la commande pidof pour trouver l'ID d'un processus :

pidof systemd
pidof top
pidof httpd

Pour trouver l'ID de processus et l'ID de processus parent du shell actuel, exécutez :

echo $$
echo $PPID

Démarrage d'un processus sous Linux

Une fois que vous exécutez une commande ou un programme (par exemple cloudcmd – CloudCommander), il lancera un processus dans le système. Vous pouvez démarrer un processus de premier plan (interactif) comme suit, il sera connecté au terminal et un utilisateur pourra l'envoyer :

cloudcmd

Travaux en arrière-plan Linux

Pour démarrer un processus en arrière-plan (non interactif), utilisez le symbole &, ici, le processus ne lit pas les entrées d'un utilisateur jusqu'à ce qu'elles soient déplacées au premier plan.

cloudcmd &
jobs

Vous pouvez également envoyer un processus en arrière-plan en le suspendant en utilisant [Ctrl + Z], cela enverra le signal SIGSTOP au processus, arrêtant ainsi ses opérations ; ça devient inactif :

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Pour continuer à exécuter la commande suspendue ci-dessus en arrière-plan, utilisez la commande bg :

bg

Pour envoyer un processus en arrière-plan au premier plan, utilisez la commande fg avec l'ID de tâche comme ceci :

jobs
fg %1

Vous aimerez peut-être aussi : Comment démarrer une commande Linux en arrière-plan et détacher le processus dans un terminal

États d'un processus sous Linux

Lors de l'exécution, un processus passe d'un état à un autre en fonction de son environnement/circonstances. Sous Linux, un processus a les états possibles suivants :

  • En cours d'exécution – ici, soit il est en cours d'exécution (c'est le processus actuel dans le système), soit il est prêt à s'exécuter (il attend d'être attribué à l'un des processeurs).
  • En attente : dans cet état, un processus attend qu'un événement se produise ou qu'une ressource système se produise. De plus, le noyau fait également la différence entre deux types de processus en attente : les processus d'attente interruptibles – peuvent être interrompus par des signaux et les processus d'attente ininterruptibles – attendent directement les conditions du matériel et ne peuvent être interrompus par aucun événement/signal.
  • Arrêté – dans cet état, un processus a été arrêté, généralement par la réception d'un signal. Par exemple, un processus en cours de débogage.
  • Zombie – ici, un processus est mort, il a été arrêté mais il a toujours une entrée dans la table des processus.

Comment afficher les processus actifs sous Linux

Il existe plusieurs outils Linux pour visualiser/répertorier les processus en cours d'exécution sur le système, les deux commandes traditionnelles et bien connues sont ps et top :

1. Commande ps

Il affiche des informations sur une sélection de processus actifs sur le système, comme indiqué ci-dessous :

ps 
ps -e | head 

2. haut – Outil de surveillance du système

top est un outil puissant qui vous offre une vue dynamique en temps réel d'un système en cours d'exécution, comme le montre la capture d'écran ci-dessous :

top 

Lisez ceci pour plus d'exemples d'utilisation : 12 TOP exemples de commandes sous Linux

3. regards – Outil de surveillance du système

glances est un outil de surveillance du système relativement nouveau doté de fonctionnalités avancées :

glances

Pour un guide d'utilisation complet, lisez : Glances - Un outil avancé de surveillance du système en temps réel pour Linux

Il existe plusieurs autres outils utiles de surveillance du système Linux que vous pouvez utiliser pour répertorier les processus actifs. Ouvrez le lien ci-dessous pour en savoir plus :

  1. 20 outils de ligne de commande pour surveiller les performances de Linux
  2. 13 outils de surveillance Linux plus utiles

Comment contrôler les processus sous Linux

Linux dispose également de quelques commandes pour contrôler les processus tels que kill, pkill, pgrep et killall. Vous trouverez ci-dessous quelques exemples de base sur la façon de les utiliser :

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Pour apprendre à utiliser ces commandes en profondeur, pour tuer/terminer les processus actifs sous Linux, ouvrez les liens ci-dessous :

  1. Un guide des commandes Kill, Pkill et Killall pour terminer le processus Linux
  2. Comment rechercher et tuer les processus en cours sous Linux

Notez que vous pouvez les utiliser pour supprimer les applications qui ne répondent pas sous Linux lorsque votre système se bloque.

Envoi de signaux aux processus

La manière fondamentale de contrôler les processus sous Linux consiste à leur envoyer des signaux. Il existe plusieurs signaux que vous pouvez envoyer à un processus, pour afficher tous les signaux exécutés :

kill -l

Pour envoyer un signal à un processus, utilisez les commandes kill, pkill ou pgrep mentionnées plus haut. Mais les programmes ne peuvent répondre aux signaux que s’ils sont programmés pour reconnaître ces signaux.

Et la plupart des signaux sont destinés à un usage interne par le système ou aux programmeurs lorsqu'ils écrivent du code. Les signaux suivants sont utiles à un utilisateur du système :

  • SIGHUP 1 – envoyé à un processus lorsque son terminal de contrôle est fermé.
  • SIGINT 2 – envoyé à un processus par son terminal de contrôle lorsqu'un utilisateur interrompt le processus en appuyant sur [Ctrl+C].
  • SIGQUIT 3 – envoyé à un processus si l'utilisateur envoie un signal de sortie [Ctrl+D].
  • SIGKILL 9 – ce signal termine (tue) immédiatement un processus et le processus n'effectuera aucune opération de nettoyage.
  • SIGTERM 15 – c'est un signal de fin de programme (kill l'enverra par défaut).
  • SIGTSTP 20 – envoyé à un processus par son terminal de contrôle pour lui demander de s'arrêter (arrêt du terminal) ; initié par l'utilisateur en appuyant sur [Ctrl+Z].

Voici des exemples de commandes kill pour tuer l'application Firefox en utilisant son PID une fois qu'elle se bloque :

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Pour tuer une application en utilisant son nom, utilisez pkill ou killall comme ceci :

pkill firefox
killall firefox 

Modification de la priorité du processus Linux

Sur le système Linux, tous les processus actifs ont une priorité et une certaine valeur intéressante. Les processus avec une priorité plus élevée obtiendront normalement plus de temps CPU que les processus avec une priorité inférieure.

Cependant, un utilisateur système disposant des privilèges root peut influencer cela avec les commandes nice et renice.

À partir du résultat de la commande top, NI affiche la valeur intéressante du processus :

top  

Utilisez la commande nice pour définir une valeur intéressante pour un processus. Gardez à l'esprit que les utilisateurs normaux peuvent attribuer une belle valeur de zéro à 20 aux processus qu'ils possèdent.
Seul l'utilisateur root peut utiliser des valeurs négatives.

Pour renice la priorité d'un processus, utilisez la commande renice comme suit :

renice +8  2687
renice +8  2103

Consultez nos quelques articles utiles sur la façon de gérer et de contrôler les processus Linux.

  1. Gestion des processus Linux : démarrage, arrêt et tout le reste
  2. Recherchez les 15 principaux processus par utilisation de la mémoire avec « top » en mode batch
  3. Recherchez les processus les plus en cours d'exécution en fonction de l'utilisation la plus élevée de la mémoire et du processeur sous Linux
  4. Comment trouver un nom de processus à l'aide du numéro PID sous Linux

C'est tout pour le moment! Avez-vous des questions ou des idées supplémentaires, partagez-les avec nous via le formulaire de commentaires ci-dessous.