Recherche de site Web

Série RHCSA : Gestion des processus dans RHEL 7 : démarrage, arrêt et tout le reste – Partie 5


Nous commencerons cet article par une révision globale et brève de ce qui se passe depuis le moment où vous appuyez sur le bouton Alimentation pour allumer votre serveur RHEL 7 jusqu'à ce que la connexion vous soit présentée. écran dans une interface de ligne de commande.

Veuillez noter que :

1. les mêmes principes de base s'appliquent également, avec peut-être des modifications mineures, à d'autres distributions Linux, et
2. la description suivante n'est pas destinée à représenter une explication exhaustive du processus de démarrage, mais uniquement les principes fondamentaux.

Processus de démarrage Linux

1. Le POST (Power On Self Test) initialise et effectue des vérifications matérielles.

2. Une fois le POST terminé, le contrôle du système est transmis au chargeur de démarrage de première étape, qui est stocké soit sur le secteur de démarrage de l'un des disques durs (pour les anciens systèmes utilisant le BIOS et le MBR), ou une partition (U)EFI dédiée.

3. Le chargeur de démarrage de la première étape charge ensuite le chargeur de démarrage de la deuxième étape, le plus souvent GRUB (GRand Unified Boot Loader), qui réside à l'intérieur de 3../boot, qui charge à son tour le noyau et le système de fichiers initial basé sur la RAM (également connu sous le nom de initramfs, qui contient des programmes et des fichiers binaires qui effectuent les actions nécessaires pour finalement monter le système de fichiers racine réel).

4. Un écran de démarrage nous est présenté qui nous permet de choisir un système d'exploitation et un noyau pour démarrer :

5. Le noyau configure le matériel connecté au système et une fois le système de fichiers racine monté, lance le processus avec le PID 1, qui à son tour initialisera d'autres processus et présentera nous avec une invite de connexion.

Remarque : Si nous souhaitons le faire ultérieurement, nous pouvons examiner les spécificités de ce processus à l'aide de la commande dmesg et filtrer sa sortie à l'aide des outils que nous ont expliqué dans les articles précédents de cette série.

Dans l'exemple ci-dessus, nous avons utilisé la célèbre commande ps pour afficher une liste des processus actuels dont le processus parent (ou en d'autres termes, le processus qui les a démarrés) est systemd . (le gestionnaire de système et de services vers lequel la plupart des distributions Linux modernes sont passées) lors du démarrage du système :

ps -o ppid,pid,uname,comm --ppid=1

N'oubliez pas que l'indicateur -o (abréviation de –format) vous permet de présenter la sortie de ps dans un format personnalisé adapté à vos besoins en utilisant les mots-clés spécifiés dans la section STANDARD FORMAT SPECIFIERS dans man ps.

Un autre cas dans lequel vous souhaiterez définir la sortie de ps au lieu d'utiliser la valeur par défaut est lorsque vous devez rechercher des processus qui provoquent une charge importante du processeur et/ou de la mémoire, et les trier en conséquence :

ps aux --sort=+pcpu              # Sort by %CPU (ascending)
ps aux --sort=-pcpu              # Sort by %CPU (descending)
ps aux --sort=+pmem              # Sort by %MEM (ascending)
ps aux --sort=-pmem              # Sort by %MEM (descending)
ps aux --sort=+pcpu,-pmem        # Combine sort by %CPU (ascending) and %MEM (descending)

Une introduction à SystemD

Peu de décisions dans le monde Linux ont suscité autant de controverses que l'adoption de systemd par les principales distributions Linux. Les partisans de Systemd citent comme principaux avantages les faits suivants :

Lire aussi : L'histoire derrière « init » et « systemd »

1. Systemd permet d'effectuer davantage de traitements en parallèle lors du démarrage du système (contrairement à l'ancien SysVinit, qui a toujours tendance à être plus lent car il démarre les processus un par un, vérifie si l'un dépend d'un autre, puis attend que les démons se lancent pour que davantage de services puissent démarrer), et

2. Il fonctionne comme une gestion dynamique des ressources dans un système en cours d'exécution. Ainsi, les services sont démarrés en cas de besoin (pour éviter de consommer les ressources système si elles ne sont pas utilisées) au lieu d'être lancés sans raison valable lors du démarrage.

3. Rétrocompatibilité avec les scripts SysVinit.

Systemd est contrôlé par l'utilitaire systemctl. Si vous venez du milieu SysVinit, il y a de fortes chances que vous soyez familier avec :

  1. l'outil service, qui - dans ces anciens systèmes - était utilisé pour gérer les scripts SysVinit, et
  2. l'utilitaire chkconfig, qui servait à mettre à jour et à interroger les informations de niveau d'exécution pour les services système.
  3. shutdown, que vous devez avoir utilisé plusieurs fois pour redémarrer ou arrêter un système en cours d'exécution.

Le tableau suivant montre les similitudes entre l'utilisation de ces outils existants et systemctl :

Legacy tool Systemctl equivalent Description
service name start systemctl start name Start name (where name is a service)
service name stop systemctl stop name Stop name
service name condrestart systemctl try-restart name Restarts name (if it’s already running)
service name restart systemctl restart name Restarts name
service name reload systemctl reload name Reloads the configuration for name
service name status systemctl status name Displays the current status of name
service –status-all systemctl Displays the status of all current services
chkconfig name on systemctl enable name Enable name to run on startup as specified in the unit file (the file to which the symlink points). The process of enabling or disabling a service to start automatically on boot consists in adding or removing symbolic links inside the /etc/systemd/system directory.
chkconfig name off systemctl disable name Disables name to run on startup as specified in the unit file (the file to which the symlink points)
chkconfig –list name systemctl is-enabled name Verify whether name (a specific service) is currently enabled
chkconfig –list systemctl –type=service Displays all services and tells whether they are enabled or disabled
shutdown -h now systemctl poweroff Power-off the machine (halt)
shutdown -r now systemctl reboot Reboot the system

Systemd a également introduit les concepts d'unités (qui peuvent être soit un service, un point de montage, un périphérique ou une prise réseau) et de cibles (c'est ainsi que systemd parvient à démarrer plusieurs processus associés en même temps). temps, et peut être considéré - bien que non égal - comme l'équivalent des niveaux d'exécution dans les systèmes basés sur SysVinit.

Résumé

Les autres tâches liées à la gestion des processus comprennent, sans toutefois s'y limiter, la capacité de :

1. Ajustez la priorité d'exécution en ce qui concerne l'utilisation des ressources système d'un processus :

Ceci est accompli grâce à l'utilitaire renice, qui modifie la priorité de planification d'un ou plusieurs processus en cours d'exécution. En termes simples, la priorité de planification est une fonctionnalité qui permet au noyau (présent dans les versions => 2.6) d'allouer des ressources système selon la priorité d'exécution assignée (c'est-à-dire la gentillesse, dans une plage allant de -20 à 19) d'un processus donné.

La syntaxe de base de renice est la suivante :

renice [-n] priority [-gpu] identifier

Dans la commande générique ci-dessus, le premier argument est la valeur de priorité à utiliser, tandis que l'autre argument peut être interprété comme des ID de processus (qui est le paramètre par défaut), des ID de groupe de processus, des ID d'utilisateur ou noms d'utilisateur. Un utilisateur normal (autre que root) ne peut modifier que la priorité de planification d'un processus dont il est propriétaire, et uniquement augmenter le niveau de qualité (ce qui signifie qu'il utilise moins de ressources système).

2. Tuez (ou interrompez l'exécution normale) d'un processus si nécessaire :

En termes plus précis, tuer un processus autorise à lui envoyer un signal pour terminer son exécution soit correctement (SIGTERM=15), soit immédiatement (SIGKILL=9) via le kill ou le pkill. commandes.

La différence entre ces deux outils est que le premier est utilisé pour mettre fin à un processus spécifique ou à un groupe de processus, tandis que le second vous permet de faire la même chose en fonction du nom et d'autres attributs.

De plus, pkill est fourni avec pgrep, qui vous montre les PID qui seront affectés si pkill est utilisé. Par exemple, avant d'exécuter :

pkill -u gacanepa

Il peut être utile de visualiser d'un coup d'œil quels sont les PID détenus par gacanepa :

pgrep -l -u gacanepa

Par défaut, kill et pkill envoient le signal SIGTERM au processus. Comme nous l'avons mentionné ci-dessus, ce signal peut être ignoré (pendant que le processus termine son exécution ou pour de bon), donc lorsque vous avez sérieusement besoin d'arrêter un processus en cours avec une raison valable, vous devrez spécifier le SIGKILL signalez sur la ligne de commande :

kill -9 identifier               # Kill a process or a process group
kill -s SIGNAL identifier        # Idem
pkill -s SIGNAL identifier       # Kill a process by name or other attributes 

Conclusion

Dans cet article, nous avons expliqué les bases du processus de démarrage dans un système RHEL 7 et analysé certains des outils disponibles pour vous aider à gérer les processus à l'aide d'utilitaires courants. et les commandes spécifiques à Systemd.

Notez que cette liste n'est pas destinée à couvrir toutes les fonctionnalités de ce sujet, alors n'hésitez pas à ajouter vos propres outils et commandes préférés à cet article en utilisant le formulaire de commentaires ci-dessous. Les questions et autres commentaires sont également les bienvenus.