GNU/Linux >> Tutoriels Linux >  >> Linux

8 commandes Linux pour une gestion efficace des processus

En règle générale, le cycle de vie d'un processus d'application comporte trois états principaux :démarrage, exécution et arrêt. Chaque État peut et doit être géré avec soin si nous voulons être des administrateurs compétents. Ces huit commandes peuvent être utilisées pour gérer les processus tout au long de leur cycle de vie.

Démarrer un processus

Le moyen le plus simple de démarrer un processus consiste à taper son nom sur la ligne de commande et à appuyer sur Entrée. Si vous souhaitez démarrer un serveur Web Nginx, tapez nginx . Peut-être voulez-vous simplement vérifier la version.

alan@workstation :~$ nginx

alan@workstation :~$ nginx -v
version de nginx :nginx/1.14.0

Affichage de votre chemin exécutable

La démonstration ci-dessus du démarrage d'un processus suppose que le fichier exécutable se trouve dans votre chemin d'accès exécutable. Comprendre ce chemin est essentiel pour démarrer et gérer un processus de manière fiable. Les administrateurs personnalisent souvent ce chemin en fonction de l'objectif souhaité. Vous pouvez afficher votre chemin d'accès exécutable à l'aide de echo $PATH .

alan@workstation :~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

QUI

Utilisez la commande which pour afficher le chemin complet d'un fichier exécutable.

alan@workstation :~$ quel nginx                                                  
/opt/nginx/bin/nginx

J'utiliserai le logiciel de serveur Web populaire Nginx pour mes exemples. Supposons que Nginx est installé. Si la commande quel nginx ne renvoie rien, alors Nginx n'a pas été trouvé car qui recherche uniquement votre chemin d'accès exécutable défini. Il existe trois façons de remédier à une situation où un processus ne peut pas être lancé simplement par son nom. La première consiste à taper le chemin complet. Bien que je préfère ne pas avoir à taper tout cela, n'est-ce pas ?

alan@workstation :~$ /home/alan/web/prod/nginx/sbin/nginx -v
version de nginx :nginx/1.14.0

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

La deuxième solution serait d'installer l'application dans un répertoire du chemin de votre exécutable. Cependant, cela peut ne pas être possible, en particulier si vous ne disposez pas des privilèges root.

La troisième solution consiste à mettre à jour votre variable d'environnement de chemin d'accès exécutable pour inclure le répertoire dans lequel l'application spécifique que vous souhaitez utiliser est installée. Cette solution dépend du shell. Par exemple, les utilisateurs de Bash devront modifier la ligne PATH=dans leur fichier .bashrc.

PATH="$HOME/web/prod/nginx/sbin:$PATH" 

Maintenant, répétez votre écho et quelles commandes ou essayez de vérifier la version. Beaucoup plus facile !

alan@workstation :~$ echo $PATH
/home/alan/web/prod/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr /bin

alan@workstation :~$ quel nginx
/home/alan/web/prod/nginx/sbin/nginx

alan@workstation :~$ nginx -v                                                
version de nginx :nginx/1.14.0

Maintenir un processus en cours d'exécution

NOHUP

Un processus peut ne pas continuer à s'exécuter lorsque vous vous déconnectez ou fermez votre terminal. Ce cas particulier peut être évité en faisant précéder la commande que vous souhaitez exécuter de la commande nohup. De plus, l'ajout d'une esperluette (&) enverra le processus en arrière-plan et vous permettra de continuer à utiliser le terminal. Par exemple, supposons que vous souhaitiez exécuter myprogram.sh.

nohup myprogram.sh & 

Une bonne chose que nohup fait est de renvoyer le PID du processus en cours d'exécution. Je parlerai plus du PID ensuite.

Gérer un processus en cours d'exécution

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

Chaque processus reçoit un numéro d'identification de processus (PID) unique. Ce numéro est ce que nous utilisons pour gérer chaque processus. Nous pouvons également utiliser le nom du processus, comme je le démontrerai ci-dessous. Plusieurs commandes permettent de vérifier l'état d'un processus en cours d'exécution. Jetons un coup d'œil à ceux-ci.

PS

Le plus courant est ps. La sortie par défaut de ps est une simple liste des processus en cours d'exécution dans votre terminal actuel. Comme vous pouvez le voir ci-dessous, la première colonne contient le PID.

alan@workstation :~$ ps
PID TTY          TIME CMD
23989 pts/0    00:00:00 bash
24148 pts/0    00:00:00 ps

J'aimerais voir le processus Nginx que j'ai commencé plus tôt. Pour ce faire, je dis à ps de me montrer chaque processus en cours d'exécution (-e ) et une liste complète (-f ).

alan@workstation :~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug18 ? 00:00:10 /sbin/init splash
root         2     0  0 18 août ? 00:00:00 [kthreadd]
racine         4     2  0 18 août ? 00:00:00 [kworker/0:0H]
root         6     2  0 Aug18 ? 00:00:00 [mm_percpu_wq]
racine         7     2  0 18 août ? 00:00:00 [ksoftirqd/0]
root         8     2  0 Aug18 ? 00:00:20 [rcu_sched]
root         9     2  0 Aug18 ? 00:00:00 [rcu_bh]
racine        10     2  0 18 août ? 00:00:00 [migration/0]
root        11     2  0 Aug18 ? 00:00:00 [watchdog/0]
root        12     2  0 Aug18 ? 00:00:00 [cpuhp/0]
racine        13     2  0 18 août ? 00:00:00 [cpuhp/1]
racine        14     2  0 18 août ? 00:00:00 [watchdog/1]
root        15     2  0 Aug18 ? 00:00:00 [migration/1]
root        16     2  0 Aug18 ? 00:00:00 [ksoftirqd/1]
alan     20506 20496  0 10:39 pts/0    00:00:00 bash
alan     20520  1454  0 10:39 ? 00:00:00 nginx :processus maître nginx
alan     20521 20520  0 10:39 ? 00:00:00 nginx :processus de travail
alan     20526 20506  0 10:39 pts/0    00:00:00 man ps
alan     20536 20526  0 10:39 pts/0    00:00:00 téléavertisseur
alan     20564 20496  0 10:40 pts/1    00:00:00 bash

Vous pouvez voir les processus Nginx dans la sortie de la commande ps ci-dessus. La commande affichait près de 300 lignes, mais je l'ai raccourcie pour cette illustration. Comme vous pouvez l'imaginer, essayer de gérer 300 lignes d'informations de processus est un peu compliqué. Nous pouvons diriger cette sortie vers grep pour filtrer nginx.

alan@workstation :~$ ps -ef |grep nginx
alan     20520  1454  0 10:39 ? 00:00:00 nginx :processus maître nginx
alan     20521 20520  0 10:39 ? 00:00:00 nginx :processus de travail

C'est mieux. Nous pouvons rapidement voir que Nginx a des PID de 20520 et 20521.

PGREP

La commande pgrep a été créée pour simplifier davantage les choses en supprimant le besoin d'appeler grep séparément.

alan@workstation :~$ pgrep nginx
20520
20521

Supposons que vous vous trouviez dans un environnement d'hébergement où plusieurs utilisateurs exécutent plusieurs instances différentes de Nginx. Vous pouvez exclure d'autres personnes de la sortie avec le -u option.

alan@workstation :~$ pgrep -u alan nginx
20520
20521

PIDOF

Un autre astucieux est pidof. Cette commande vérifiera le PID d'un binaire spécifique même si un autre processus portant le même nom est en cours d'exécution. Pour configurer un exemple, j'ai copié mon Nginx dans un deuxième répertoire et je l'ai démarré avec le préfixe défini en conséquence. Dans la vraie vie, cette instance pourrait se trouver à un emplacement différent, tel qu'un répertoire appartenant à un autre utilisateur. Si j'exécute les deux instances Nginx, le ps -ef la sortie montre tous leurs processus.

alan@workstation :~$ ps -ef |grep nginx
alan     20881  1454  0 11:18 ? 00:00:00 nginx :processus maître ./nginx -p /home/alan/web/prod/nginxsec
alan     20882 20881  0 11:18 ? 00:00:00 nginx :processus de travail
alan     20895  1454  0 11:19 ? 00:00:00 nginx :processus maître nginx
alan     20896 20895  0 11:19 ? 00:00:00 nginx :processus de travail

L'utilisation de grep ou de pgrep affichera les numéros PID, mais nous ne pourrons peut-être pas discerner quelle instance est laquelle.

alan@workstation :~$ pgrep nginx
20881
20882
20895
20896

La commande pidof peut être utilisée pour déterminer le PID de chaque instance Nginx spécifique.

alan@workstation :~$ pidof /home/alan/web/prod/nginxsec/sbin/nginx
20882 20881

alan@workstation :~$ pidof /home/alan/ web/prod/nginx/sbin/nginx
20896 20895

HAUT

La commande top existe depuis longtemps et est très utile pour afficher les détails des processus en cours d'exécution et identifier rapidement les problèmes tels que les porcs de mémoire. Sa vue par défaut est illustrée ci-dessous.

top - 11:56:28 up 1 jour, 13:37,  1 utilisateur,  charge moyenne :0,09, 0,04, 0,03
Tâches :292 au total,   3 en cours d'exécution, 225 en veille,   0 à l'arrêt,   0 zombie
%Cpu(s) : 0,1 us,  0,2 sy,  0,0 ni, 99,7 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :16387132 au total, 10854648 libres,  1859036 utilisés,  3673448 buff /cache
Échange de KiB :       0 total,        0 libre,        0 utilisé. 14176540 DISPONNEZ MEMBR />
PID UTILISATEUR PR NI VER SHR SHR SHR ST% CPU% Time + Commande
17270 Alan 20 0 3930764 247288 98992 R 0.7 1.5 5:58.22 Gnome-Shell
20496 Alan 20 0 816144 45416 29844 S 0.5 0.3 0:22.16 GNOME-Terminal-
21110 Alan 20 0 41940 3988 3188 R 0.1 0,0 0:00.17 Haut
1 Root 20 0 225564 9416 6768 S 0.0 0.1 0:10.72 Systemd
2 Root 20 0 0 0 0 S 0.0 0,0 0:00.01 KTHADDD
4 ROOT 0 -20 0 0 0 I 0.0 0.0 0:00.00 Kworker / 0:0h
6 racine 0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
    7 racine      20   0       0      0      0 S   0.0  0.0   0:00.08 kpre

L'intervalle de mise à jour peut être modifié en tapant la lettre s suivi du nombre de secondes que vous préférez pour les mises à jour. Pour faciliter la surveillance de nos exemples de processus Nginx, nous pouvons appeler top et transmettre le ou les PID à l'aide de -p option. Cette sortie est beaucoup plus propre.

alan@workstation :~$ top -p20881 -p20882 -p20895 -p20896

Tâches :  4 au total,   0 en cours d'exécution,   4 en veille,   0 arrêté,   0 zombie
%Cpu(s ) : 2,8 us,  1,3 sy,  0,0 ni, 95,9 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :16387132 au total, 10856008 libres,  1857648 utilisés,  3673476 buff/cache
KiB Échange :       0 total,        0 gratuit,        0 utilisé. 14177928 Disponible MEMBR />
UTILISATEUR PID PR NI virgne SHR SHR ST% CPU% CPU% Time + Commande
20881 Alan 20 0 12016 348 0 S 0.0 0.0 0:00.00 NGinx
20882 Alan 20 0 12460 1644 932 S 0.0 0.0 0:00.00 NGinx
20895 Alan 20 0 12016 352 0 S 0.0 0,0 0:00.00 NGinx
20896 Alan 20 0 12460 1628 912 S 0.0 0.0 0:00.00 NGINX

Il est important de déterminer correctement le PID lors de la gestion des processus, en particulier l'arrêt d'un. De plus, si vous utilisez top de cette manière, chaque fois que l'un de ces processus est arrêté ou qu'un nouveau est démarré, top devra être informé des nouveaux processus.

Arrêter un processus

TUER

Fait intéressant, il n'y a pas de commande d'arrêt. Sous Linux, il existe la commande kill. Kill est utilisé pour envoyer un signal à un processus. Le signal le plus couramment utilisé est "terminate" (SIGTERM) ou "kill" (SIGKILL). Cependant, il y en a beaucoup plus. Voici quelques exemples. La liste complète peut être affichée avec kill -L .

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV 2   PE  R 1 14) SIGALRM     15) SIGTERM

Remarquez que le signal numéro neuf est SIGKILL. Habituellement, nous émettons une commande telle que kill -9 20896 . Le signal par défaut est 15, qui est SIGTERM. Gardez à l'esprit que de nombreuses applications ont leur propre méthode d'arrêt. Nginx utilise un -s option pour transmettre un signal tel que "stop" ou "reload". Généralement, je préfère utiliser la méthode spécifique d'une application pour arrêter une opération. Cependant, je vais démontrer la commande kill pour arrêter le processus Nginx 20896, puis confirmer qu'il est arrêté avec pgrep. Le PID 20896 n'apparaît plus.

alan@workstation :~$ kill -9 20896
 
alan@workstation :~$ pgrep nginx
20881
20882
20895
22123

PKILL

La commande pkill est similaire à pgrep en ce sens qu'elle peut effectuer une recherche par nom. Cela signifie que vous devez être très prudent lorsque vous utilisez pkill. Dans mon exemple avec Nginx, je pourrais ne pas choisir de l'utiliser si je ne veux tuer qu'une seule instance de Nginx. Je peux passer l'option Nginx -s arrêter à une instance spécifique pour la tuer, ou j'ai besoin d'utiliser grep pour filtrer sur la sortie complète de ps.

/home/alan/web/prod/nginx/sbin/nginx -s stop

/home/alan/web/prod/nginxsec/sbin/nginx -s stop

Si je veux utiliser pkill, je peux inclure le -f option pour demander à pkill de filtrer l'intégralité de l'argument de ligne de commande. Ceci s'applique bien sûr également à pgrep. Donc, je peux d'abord vérifier avec pgrep -a avant d'émettre le pkill -f .

alan@workstation :~$ pgrep -a nginx
20881 nginx :processus maître ./nginx -p /home/alan/web/prod/nginxsec
20882 nginx :processus de travail
20895 nginx :processus maître nginx
20896 nginx :processus de travail

Je peux également affiner mon résultat avec pgrep -f . Le même argument utilisé avec pkill arrête le processus.

alan@workstation :~$ pgrep -f nginxsec
20881
                                           
alan@workstation :~$ pkill -f nginxsec

L'essentiel à retenir avec pgrep (et surtout pkill) est que vous devez toujours être sûr que votre résultat de recherche est exact afin que vous n'affectiez pas involontairement les mauvais processus.

La plupart de ces commandes ont de nombreuses options de ligne de commande, je recommande donc toujours de lire la page de manuel de chacune d'entre elles. Bien que la plupart d'entre eux existent sur des plates-formes telles que Linux, Solaris et BSD, il existe quelques différences. Testez toujours et soyez prêt à corriger si nécessaire lorsque vous travaillez sur la ligne de commande ou que vous écrivez des scripts.


Linux
  1. 20 commandes Linux essentielles pour chaque utilisateur

  2. 3 feuilles de triche Linux essentielles pour la productivité

  3. Utilisation d'AppImage pour la gestion des packages Linux

  4. Aide-mémoire pour les commandes Linux courantes

  5. 12 commandes utiles pour filtrer le texte pour des opérations de fichiers efficaces sous Linux

Comment tuer un processus sous Linux ? Commandes pour terminer

30 meilleurs exemples de commandes pour la surveillance sous Linux

Principales commandes Linux pour les administrateurs système

Gestion des processus Linux améliorée avec htop

Commandes de gestion de groupe sous Linux

Commandes pour la gestion des processus sous Linux