Fondamentaux de la gestion des processus sur Linux

Fondamentaux de la gestion des processus sur Linux

Objectif

Apprenez les principes fondamentaux de la gestion des processus sur Linux

Système d'exploitation et versions logicielles

  • Système opérateur: - Toutes les distributions Linux

Exigences

  • Certains programmes mentionnés dans ce tutoriel nécessitent un accès root

Difficulté

FACILE

Conventions

  • # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
    directement en tant qu'utilisateur racine ou en utilisant Sudo commande
  • $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Introduction

L'une des activités de base d'un administrateur système est celle de la surveillance et de l'interaction avec les processus exécutés sur une machine. Dans ce tutoriel, vous serez initié à l'utilisation de certains outils fondamentaux qui vous aideront à accomplir cette tâche vitale.

La commande ps

PS est l'un des programmes fondamentaux utilisés dans la surveillance des processus: il vous donne essentiellement un instantané des processus exécutés sur une machine au moment où vous invoquez la commande. Voyons-le en action: nous allons d'abord essayer de l'exécuter sans aucune option:

$ ps pid tty time cmd 24424 pts / 0 00:00:00 bash 24468 pts / 0 00:00:00 ps 

Comme vous pouvez le voir dans la sortie ci-dessus, seuls deux processus sont affichés: frapper avec un Piquer (ID de processus) 24424 et ps lui-même avec le pid 24468. En effet, lorsqu'il est invoqué sans aucune option, le ps La commande affiche les processus associés à Uid de l'utilisateur qui a lancé la commande, et le terminal à partir duquel il est invoqué.

Comment surmonter cette limitation? En utilisant le -un option que nous pouvons faire ps pour nous montrer tous les processus, à l'exception du chefs de session et les processus non associés à un terminal.

Un leader de session est un processus qui a un PID qui est le même du Sid (ID de session) de la session dont il s'agit (le premier) membre. Lorsqu'un processus est créé, il fait partie de la même session de son processus parent: car par convention, l'ID de session est le même du Piquer De son premier membre, nous appelons ce processus un chef de session. Essayons de courir ps avec le -un Option et vérifiez sa sortie:

$ ps -a pid tty time cmd 12466 tty1 00:00:00 gnome-session-b 12480 tty1 00:00:17 gnome-shell 12879 tty1 00:00:00 xwayland 12954 tty1 00:00:00 GSD-Sound 12955 TTY1 00:00:00 GSD-WACOM 12957 TTY1 00:00:00 GSD-XSETTISS 12961 TTY1 00:00:00 GSD-A11Y-KEYBOA 12962 TTY1 00:00:00 GSD-A11Y-Settin 12965 TTY1 00:00:00 GSDD -clipboard 12966 TTY1 00:00:03 GSD-Color 12967 TTY1 00:00:00 GSD-DATETime 12970 TTY1 00:00:00 GSD-Housekeepin 12971 TTY1 00:00:00 GSD-Keyboard 12972 TTY1 00:00:00 GSD -Média-keys 12973 TTY1 00:00:00 GSD-Mouse 12976 TTY1 00:00:00 GSD-Orientation […] 

La sortie du programme a été tronquée, mais vous pouvez facilement voir qu'elle comprend désormais des processus qui appartiennent à différents terminaux et utilisateurs. La sortie nous montre des informations sur Piquer Dans la première colonne, Tty dans la seconde, TEMPS qui est le temps cumulatif que le CPU a passé sur le processus, et CMD qui est la commande qui a commencé le processus.

Pour avoir une sortie encore plus riche, nous pouvons ajouter le -u et -X Options: le premier raconte ps faire une sélection par ID de l'utilisateur, Bien que ce dernier demande au programme d'inclure également des processus non associés à un terminal, comme les démons:

$ ps -Aux utilisateur pid% cpu% mem vsz rss tty stat start time root root 1 0.0 0.2 223932 8708 ? SS JUL20 0:04 / USR / LIB / Systemd / Systemd - Switched-ROOT - System - DESERIALISE 25 ROOT 2 0.0 0.0 0 0 ? S JUL20 0:00 [KTHREADD] ROOT 4 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Jul20 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Jul20 0:07 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul20 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul20 0:04 [rcuos/0] root 11 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/0] root 12 0.0 0.0 0 0 ? S Jul20 0:00 [migration/0] root 13 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/0] root 14 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/1] root 17 0.0 0.0 0 0 ? S Jul20 0:00 [migration/1] root 18 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/1] root 20 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/1:0H] root 21 0.0 0.0 0 0 ? S Jul20 0:02 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/2] root 24 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/2] root 25 0.0 0.0 0 0 ? S Jul20 0:00 [migration/2] root 26 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/2] root 28 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/2:0H] [… ] egdoc 13128 0.0 0.1 74736 5388 ? Ss Jul20 0:00 /usr/lib/systemd/systemd --user egdoc 13133 0.0 0.0 106184 420 ? S Jul20 0:00 (sd-pam) egdoc 13143 0.0 0.1 218328 3612 ? Sl Jul20 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login [… ] 

Vous pouvez voir que beaucoup de nouvelles informations ont été ajoutées. La première nouvelle colonne de la sortie est %CPU: Cela montre l'utilisation du processeur du CPU, exprimée en pourcentage. Un pourcentage est également utilisé pour la colonne suivante, % Mem, qui montre la mémoire physique sur la machine utilisée par le processus. Vsz est la taille de mémoire virtuelle du processus exprimé en kib.

Le Stat Colonne utilise un code pour exprimer l'état de processus. Nous n'allons pas décrire tous les états possibles ici, mais expliquez simplement ceux apparaissant dans la sortie ci-dessus (vous pouvez avoir un aperçu complet en consultant la page manuelle PS).

Examinons le premier processus dans la sortie: il est Pid 1, est donc le premier processus lancé par le noyau. Cela a du sens, nous pouvons voir que c'est systemd, Le système d'initiation Linux relativement nouveau, désormais adopté par presque toutes les distributions. Tout d'abord, nous avons un S ce qui indique que le processus est dans l'état de sommeil interruptible ce qui signifie qu'il est inactif et se réveillera dès qu'il recevra une entrée. Le s, Au lieu de cela, nous dit que le processus est un chef de session.

Un autre symbole, n'apparaissant pas dans le premier brut, mais dans certaines des autres des descriptions de processus est < ce qui indique que le processus a une priorité élevée, et donc un faible bon Valeur (nous verrons ce qu'est une bonne valeur dans la section pertinente de ce tutoriel). Un l dans le Stat colonne, indique que le processus est multi-thread et un + Signe que c'est dans le groupe de processus de premier plan.

Enfin, dans la dernière colonne, nous avons le COMMENCER colonne, montrant l'heure à laquelle la commande a commencé.

Une autre belle option que nous pouvons transmettre au ps commander, c'est -o, qui est la version courte de --format. Cette option vous permet de modifier la sortie par l'utilisation des espaces réservés, spécifiant quelles colonnes afficher. Par exemple, en cours d'exécution:

$ ps -ax -o% u% p% n% c

Nous donnera le UTILISATEUR colonne d'abord (% u), suivie du Piquer du processus (% p), par le Ni colonne (% n), qui indique le bon niveau, et enfin par le COMMANDE colonne (% c):

User Pid Ni Commande racine 1 0 systemd root 2 0 kthreadd root 4 -20 kworker / 0: 0h root 6 -20 mm_percpu_wq root 7 0 ksoftirqd / 0 root 8 0 rcu_sched root 9 0 rcu_bh root 10 0 rcUOS / 0 root 11 0 rCUOB / 0 ROOT 12 - Migration / 0 Root 13 - Watchdog / 0 Root 14 0 CPUHP / 0 ROOT 15 0 CPUHP / 1 ROOT 16 - Watchdog / 1 Root 17 - Migration / 1 Root 18 0 Ksoftirqd / 1 Root 20 -20 KWORKER / 1: 0h Root 21 0 RCUOS / 1 ROOT 22 0 RCUOB / 1 ROOT 23 0 CPUHP / 2 ROOT 24 - Watchdog / 2 Root 25 - Migration / 2 Root 26 0 Ksoftirqd / 2 

En utilisant le «haut» pour interagir dynamiquement avec les processus

Alors que ps nous donne un instantané statique de processus et de leurs informations au moment où vous l'exécutez, haut nous donne une vue dynamique des processus, mis à jour à un intervalle de temps spécifié que nous pouvons spécifier à la fois lors du lancement du programme et de manière interactive (la valeur par défaut est de 3 secondes).

Top ne nous montre pas seulement une représentation dynamique des processus en cours: nous pouvons interagir avec eux et avec le programme lui-même, par l'utilisation de certaines clés. Par exemple, pressant B nous permet de basculer l'utilisation de caractères audacieux, d nous permet de saisir une valeur pour modifier le temps de retard, k nous permet d'envoyer un signal à un processus en incitant à son Piquer Et pour le signal code, avec Sigterm Être la valeur par défaut.

Changer la priorité des processus avec Nice et Renice

Comme nous l'avons vu auparavant, chaque processus a un priorité qui lui est affecté, ce qui indique combien le processus doit attendre que d'autres processus sont gratuits avant de pouvoir y accéder. Cette priorité peut être spécifiée avec une valeur qui se trouve dans une gamme qui va de -20 pour 19. Moins la valeur est, plus la priorité du processus est élevée. Cela peut sembler contre-intuitif au début, mais voyez-le de cette façon: plus le processus est agréable pour d'autres processus, plus ils le dépasseront en accédant aux ressources.

Mais comment pouvons-nous définir la priorité d'un processus? Nous pouvons utiliser le bon Programme pour accomplir la tâche. Dites que vous souhaitez exécuter un script avec la valeur de priorité la plus faible possible: vous le préfacez de cette façon:

$ Nice -N 19 ./scénario.shot

Vous pouvez également modifier la priorité d'un programme déjà exécuté par l'utilisation de Renice Sachant que c'est Piquer:

# Renice -N 15 pid

Où le PID est l'identifiant de processus du programme. N'oubliez pas que le Renice La commande doit être exécutée avec des autorisations racines.

Envoyez des signaux aux processus avec les commandes Kill et Killall

Nous pouvons utiliser la commande kill pour envoyer un signal à un processus qui nous appartient, ou à chaque processus si nous avons des autorisations racines. Les différents signaux que nous pouvons envoyer sont identifiés par un nombre: nous pouvons facilement voir ces correspondances en exécutant la commande kill avec le -l option:

$ kill -l 1) Sigup 2) Sigint 3) Sigquit 4) Sigill 5) Sigtrap 6) Sigabrt 7) Sigbus 8) Sigfpe 9) Sigkill 10) Sigusr1 11) Sigsegv 12) Sigusr2 13) Sigpipe 14) Sigalrm 15) Sigtron 16) ) Sigstkflt 17) Sigchld 18) Sigconont 19) Sigstop 20) Sigtstp 21) Sigttin 22) Sigttou 23) Sigurg 24) Sigxcpu 25) Sigxfsz 26) Sigvtalrm 27) Sigprof 28) Sigwinch 29) 35) Sigrtmin + 1 36) Sigrtmin + 2 37) Sigrtmin + 3 38) Sigrtmin + 4 39) Sigrtmin + 5 40) Sigrtmin + 6 41) Sigrtmin + 7 42) Sigrtmin + 8 43) Sigrtmin + 9 44) Sigrtmin + 10 45) Sigrtmin + 11 46) Sigrtmin + 12 47) Sigrtmin + 13 48) Sigrtmin + 14 49) Sigrtmin + 15 50) SigrtMax-14 51) SigrtMax-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) Sigrtmax-9 56) Sigrtmax-8 57) Sigrtmax-7 58) Sigrtmax-6 59) Sigrtmax-5 60) Sigrtmax-4 61) Sigrtmax-3 62) Sigrtmax-2 63) SIGRTMAX-1 64) SIGRTMAX 

Si aucune option n'est transmise au tuer Commande, par défaut, il enverra un Sigterm signal au processus spécifié, auquel ce dernier pourrait réagir de diverses manières: il peut s'arrêter immédiatement, essayer de faire un nettoyage avant de s'arrêter, ou simplement ignorer le signal.

Pour spécifier le signal à envoyer en utilisant Kill, nous exécutons la commande suivie d'un tableau de bord et du nombre du signal à envoyer. Par exemple pour exécuter un Sigkill Signal que nous devons exécuter:

Kill -9 pid

Le Sigkill Signal, contrairement Sigterm ne peut pas être capturé par le processus, qui ne peut pas réagir: il sera simplement terminé immédiatement.

Un autre signal que vous verrez souvent est Sigint qui est le signal envoyé sur l'interruption du clavier (CTRL-C). Il essaie également de résilier le processus d'une manière gracieuse et peut être ignoré par le processus. Sigstop et Sigcontte va respectivement suspendre et reprendre l'exécution d'un processus: le premier, comme Sigkill ne peut pas être attrapé ou ignoré. Pour une liste complète et une description des signaux, vous pouvez consulter le manuel pour signal (7) en cours d'exécution:

Signal de l'homme 7

Le tuer tous Le programme a le même but de tuer, Et comme tuer, envoie un Sigterm signal quand aucun autre n'est spécifié, (cette fois avec le --signal option), mais au lieu de référencer un processus par son Piquer, Il le fera par nom de commande, tuant efficacement tous les processus exécutés sous le même.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Meilleur outil de surveillance du système pour Linux
  • Ubuntu 20.04 Surveillance du système avec des widgets conky
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Fichiers de configuration Linux: 30 premiers
  • Optimisation des performances de Linux: outils et techniques
  • Ubuntu 22.04 Surveillance du système avec des widgets conky
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Téléchargement Linux