Retour au blog

Gérer les processus sous Linux - un guide sur l'utilisation de ps, kill et nice

Gérer les processus sous Linux - un guide sur l'utilisation de ps, kill et nice

Introduction

Lorsque la plupart d'entre nous utilisent des ordinateurs, nous exécutons diverses applications. Ces applications sont exécutées par des programmes appelés serveurs ou systèmes d'exploitation. Il existe de nombreux types de serveurs différents qui fonctionnent de différentes manières. L'un d'eux est Linux. Linux exécute les applications sous forme de processus.

Sous Linux, nous appelons chaque application un « processus ». Le serveur est capable de gérer l'aspect de bas niveau du cycle de vie du processus. En tant qu'utilisateur, vous devrez peut-être interagir avec le serveur pour manipuler certains aspects de plus haut niveau. Vous pouvez communiquer avec le système d'exploitation et le gérer en utilisant divers outils. Il existe de nombreuses commandes que vous pouvez utiliser pour modifier divers aspects et fonctions du serveur. Voici un tutoriel facile à suivre sur la façon de configurer facilement votre serveur basé sur Linux sur Ubuntu. Vous pouvez également apprendre comment installer la pile LAMP (Linux, Apache, MySQL, PHP).

Ce guide se concentre sur la façon dont vous pouvez utiliser ps, kill et nice pour gérer les processus sous Linux.

Visualiser les processus en cours d'exécution sous Linux

  • top

Pour commencer, l'une des commandes les plus basiques que vous devriez connaître est top. Cet outil vous aide à visualiser quels processus sont actuellement en cours d'exécution sur le système. Voici comment il apparaîtra lorsque vous l'exécuterez :

top command output

 

En haut du résultat, vous pouvez localiser les statistiques du système. Cela vous donne des informations sur des éléments tels que la charge du système et le nombre de tâches. Dans cet exemple, vous pouvez déterminer qu'il y a un processus en cours d'exécution et 55 processus inactifs. Les processus inactifs ou en veille sont ceux que vous n'utilisez pas actuellement. Cela signifie qu'ils n'occupent pas les ressources du système. Enfin, vous pouvez voir tous les processus en cours d'exécution près du bas de la fenêtre de résultats avec les statistiques d'utilisation.

  • htop

Avant d'utiliser cette commande, vous devrez l'installer à partir des dépôts en saisissant et en exécutant ce qui suit :

Une fois que vous l'avez, vous pouvez l'utiliser pour afficher des informations similaires à celles obtenues avec top. La différence principale est qu'avec la commande htop, vous obtenez un résultat plus convivial :

htop command output

Comme vous pouvez le voir, ce résultat est facile à suivre et à interpréter.

Utiliser ps pour lister les processus

Bien que vous puissiez utiliser les commandes mentionnées ci-dessus pour visualiser les processus en cours d'exécution, elles ne couvrent pas toujours tous les scénarios. Heureusement, nous disposons d'un outil plus puissant et plus flexible. Il s'agit de la commande ps.

Explorons ce que vous verrez si vous exécutez la commande telle quelle :

ps command output

Dans cette sortie, vous pouvez voir tous les processus qui s'exécutent en relation avec l'utilisateur et la session en cours. Cependant, cela ne vous donne pas beaucoup d'informations.

Si vous souhaitez une vue plus globale de tous les processus en cours d'exécution sur le système, vous devez utiliser un argument. Un argument vous permet de voir tous les processus appartenant à tous les utilisateurs, indépendamment de l'association de terminal. La sortie apparaît également dans un format très convivial et facile à lire. Voici un exemple :

ps aux

D'un autre côté, vous pouvez également visualiser ces informations sous forme d'arborescence. Ici, comme vous le verrez, les relations hiérarchiques deviennent également apparentes :

output in tree format

Dans cet exemple, vous pouvez voir comment kthreadd est affiché comme le parent des processus qui suivent.

  • Que sont les identifiants de processus ?

En tant qu'utilisateur Linux ou Unix, vous devez connaître les identifiants de processus. Également appelés PID, ce sont des identités uniques attribuées à chaque processus par le système. Ces identités permettent au serveur de suivre chaque processus individuel. Pour connaître le PID d'un processus donné, vous devez utiliser la commande pgrep, comme ceci :

Lorsque vous démarrez votre système, le premier processus commence à s'exécuter. Ce processus s'appelle init. Par défaut, le processus init obtient le PID « 1 ». Vous pouvez vérifier le PID de ce processus comme suit :

Le processus init a ensuite la responsabilité de démarrer tous les autres programmes ou processus. Naturellement, les processus suivants auront des PID croissants ou plus grands.

  • Que sont les processus parents ?

Un autre concept à connaître est le processus parent. Si le processus A engendre le processus B, alors le processus A est le processus parent du processus B. Pour aider à les distinguer, le système attribue aux processus parents un PPID. Vous pouvez remarquer ce PPID dans les en-têtes de colonnes chaque fois que vous exécutez une commande de gestion telle que top, htop et ps.

  • Qu'est-ce que les relations parent-enfant ?

Comme nous le savons déjà, les processus parents engendrent des processus enfants. Cette création se fait en deux étapes. La première est fork(). Elle commence par créer un nouvel espace d'adressage. Elle copie également les ressources du parent en utilisant le mécanisme de copie sur écriture (copy-on-write) afin qu'elles soient également disponibles pour le processus enfant. La seconde est exec(). Elle est chargée de charger et d'exécuter un exécutable dans l'espace d'adressage fraîchement créé.

  • Que se passe-t-il si le processus enfant meurt avant le processus parent ?

Si cela se produit, le processus enfant devient un zombie. C'est-à-dire jusqu'à ce que le processus parent recueille des informations à son sujet ou indique au noyau qu'il n'a pas besoin des informations associées. Une fois que cela se produit, les ressources que le processus utilisait sont libérées.

  • Que se passe-t-il si le processus parent meurt avant le processus enfant ?

Dans ce scénario, le système réattribuera le processus enfant à un autre processus parent. Il peut s'agir d'init ou de tout autre processus.

Envoyer des signaux aux processus sous Linux

Vous pouvez amener un processus donné à vous répondre en lui envoyant un signal. Les signaux vous aident à communiquer avec le système d'exploitation. Vous pouvez utiliser le signal pour forcer une application à se terminer, à se lancer ou à modifier un comportement ou une tâche donnés.

  • Utiliser le PID pour envoyer des signaux

L'un des utilitaires que vous pouvez utiliser pour envoyer des signaux sous Linux est kill. Cette commande, comme son nom l'indique, vous aide à terminer ou à tuer un processus :

Cet utilitaire envoie le signal TERM au processus, ce qui lui demande de se terminer. La commande permet à l'application d'effectuer un nettoyage et de s'arrêter facilement. Si le programme ne s'arrête pas correctement à la réception du signal TERM, vous pouvez passer directement outre en envoyant le signal KILL :

Ce signal ne va pas au programme. Il va au noyau du système d'exploitation. Le noyau va directement arrêter le processus. Vous pouvez l'utiliser lorsqu'un programme ignore les signaux que vous lui envoyez.

Dans cette commande, vous pouvez également remplacer le nom du signal par le numéro qui lui est associé. Par exemple, vous pouvez utiliser « -15 » à la place de « -TERM ». De même, vous pouvez remplacer « -KILL » par « -9 ».

  • Utiliser des signaux à des fins diverses

Vous pouvez utiliser des signaux pour faire d'autres choses que de tuer ou de terminer des programmes. Par exemple, l'un des problèmes auxquels vous pouvez être confronté est le redémarrage des démons. Chaque fois qu'un démon reçoit un signal de raccrochage ou HUP, il redémarre dans des programmes comme Apache. Pour contourner cela, vous pouvez utiliser le signal suivant :

Cette commande obligera Apache à recharger sa configuration. Par conséquent, il continuera à vous servir le contenu concerné.

Si vous souhaitez voir quels signaux vous pouvez envoyer avec l'utilitaire kill, utilisez la commande suivante :

list of signals

  • Envoyer des signaux par nom

Traditionnellement, vous enverriez un signal en utilisant le PID du programme. Cependant, vous avez la possibilité d'envoyer des signaux en utilisant le nom habituel du processus. Pour ce faire, vous pouvez utiliser la commande pkill. Elle fonctionne de manière similaire à la commande pkill. La seule différence est qu'elle vous permet d'utiliser le nom du processus :

Cette commande pkill est l'équivalent de la commande kill suivante :

Vous disposez également d'une commande lorsque vous souhaitez envoyer un signal à chaque instance plutôt qu'à un processus particulier. La commande suivante enverra un signal TERM à toutes les instances de Firefox en cours d'exécution sur le système :

Ajuster les priorités des processus

Une autre chose que vous pouvez faire avec les commandes Linux est d'ajuster les priorités. Cela signifie que vous pouvez décider quel processus est prioritaire dans votre environnement de serveur. Il peut y avoir certains processus que vous considérez comme critiques. D'autres peuvent ne pas être aussi nécessaires. Le système n'exécutera ces derniers programmes que lorsqu'il restera des ressources.

Vous pouvez contrôler la priorité des processus sous Linux grâce à la commande niceness. Cette valeur indique que les tâches à haute priorité sont moins « nice » (gentilles) et les processus à faible priorité sont plus « nice ». Voyez les choses ainsi : les processus à haute priorité sont moins « nice » car ils accaparent les ressources. Les tâches à faible priorité les partagent, elles sont donc plus « nice ».

Vous pouvez voir la valeur nice d'un processus donné lorsque vous exécutez la commande top. Cette valeur se trouve dans la colonne « NI ». Les tâches à haute priorité ont des valeurs nice comprises entre « -19/-20 ». Les processus à faible priorité se situent entre « 19/20 ». Vous verrez quelque chose comme ceci :

Si vous souhaitez exécuter un processus avec une valeur nice attribuée personnellement, il vous suffit d'utiliser la commande nice :

Cette commande ne fonctionnera que lorsque vous démarrerez le programme en question. Si vous souhaitez modifier la valeur nice d'un programme déjà en cours d'exécution, vous devez utiliser renice :

Conclusion

Comme vous pouvez le constater, les outils présentés ici sont très différents des outils graphiques. Par conséquent, ils peuvent être difficiles à comprendre pour un débutant. Ce guide vous aidera à vous familiariser avec les commandes. Plus de pratique vous aidera à mieux apprendre et à les utiliser plus efficacement.

Consultez nos autres ressources qui peuvent vous aider à mieux gérer vos serveurs Linux, notamment des tutoriels sur comment configurer votre serveur Linux pour utiliser l'authentification par clé SSH, localiser des fichiers sur votre système VPS Linux avec whereis, which, whatis, readlink et find, et lire et définir des variables d'environnement et de shell sur un VPS Linux.

Bonne informatique !

author

Akshay Nagpal

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.