Qu’est-ce qu’un processus sous Linux?

Le terme processus est souvent inconnu de quiconque n'a pas une formation en informatique. Cependant, c'est celui qui est souvent utilisé lors des discussions sur la programmation Linux, et les processus sont essentiels au travail d'administration système.

Linux utilise également le terme emploi pour désigner un concept très similaire. La différence est subtile mais importante, et le contrôle des tâches est un outil utile lors de l'exécution d'un environnement multi-tâches. Vous pouvez utiliser un certain nombre d'outils et de commandes intégrées pour jongler avec les tâches.

Qu'est-ce qu'un processus?

Au niveau le plus simple, vous pouvez considérer un processus comme l'équivalent d'un programme que vous exécutez. Il peut s'agir d'une application GUI complète telle que votre navigateur Web. Il peut s'agir d'une commande unique que vous exécutez sur la ligne de commande, telle que ls . D'une manière générale, tout ce qui se passe sur votre ordinateur dépend d'un processus, en son cœur.

En réalité, une seule application peut utiliser plusieurs processus pour exécuter des tâches distinctes simultanément. Un appel de ligne de commande à l'aide de canaux, tels que:

 $ grep "error" log.txt | wc -l

Exécutera deux processus distincts, un pour chaque segment de tuyau.

Comment les processus commencent

Les processus sont soit créés explicitement par vous, l'utilisateur, soit automatiquement par votre ordinateur lui-même. En fait, vous pouvez déjà avoir des centaines de processus en cours d'exécution dès que vous avez démarré.

Les processus peuvent engendrer d'autres processus et init, le premier processus qui démarre sur de nombreux systèmes Linux traditionnels, est en fin de compte responsable du démarrage de chaque processus qui s'exécute.

Comment se terminent les processus

De nombreux processus sont des commandes de courte durée qui exécutent une tâche puis s'arrêtent. Taper ls dans un terminal démarrera, exécutera et arrêtera un processus en quelques fractions de seconde.

Certains processus, tels que les démons , s'exécutent en continu. Le processus cron , par exemple, exécute périodiquement d'autres commandes pendant que son ordinateur hôte est en cours d'exécution.

Identifier un processus

Le système d'exploitation (OS) attribue un identifiant unique à chaque processus. Il est connu sous le nom de PID ou ID de processus. Cette valeur est généralement un nombre de 1 à 5 chiffres et les processus futurs peuvent réutiliser le PID d'un processus précédent qui a été entièrement nettoyé.

Les PID sont utilisés par le système d'exploitation lui-même de différentes manières. Un bon exemple est le répertoire / proc qui stocke des informations sur les processus en cours d'exécution.

Connexes: Quels sont ces dossiers dans votre répertoire racine Linux?

Qu'est-ce qu'un emploi?

Dans la terminologie Linux, un travail est un programme géré par le shell. Il se compose généralement d'un processus, mais peut en utiliser plusieurs. Lorsque vous entrez une commande dans votre terminal, un processus est généré pour exécuter la commande et un travail est créé pour aider à contrôler la commande pendant son exécution.

Gérer les emplois

Si vous exécutez une tâche au premier plan, vous pouvez l'interrompre en appuyant sur Ctrl + C (^ C). En règle générale, cela entraînera la fermeture du processus et renverra le terminal à une invite.

 $ sleep 100
^C
$

Sinon, appuyer sur Ctrl + Z (^ Z) arrêtera l'exécution de la tâche, mais ne la terminera pas. Vous pouvez y penser plus comme une pause.

 $ sleep 100
^Z
[1]+ Stopped sleep 100
$

Notez que le shell vous indique le numéro du travail entre crochets lorsque vous l'arrêtez. Cela peut être utilisé avec d'autres commandes pour contrôler le travail. Par exemple, vous pouvez redémarrer une tâche en l'amenant au premier plan à l'aide de fg :

 $ fg %1
sleep 100

Vous pouvez utiliser une commande similaire pour redémarrer le travail en arrière-plan:

 $ bg %1
[1]+ sleep 100 &
$

Cela ramènera le contrôle à une invite, afin que vous puissiez continuer avec d'autres travaux pendant que le travail s'exécute. Si vous souhaitez qu'une tâche s'exécute en arrière-plan dès que vous la lancez, ajoutez un & à la fin de la commande:

 $ sleep 100 &
[1] 61087
$

Dans ce cas, le shell imprime le numéro de travail entre parenthèses et le PID par la suite.

Outils communs pour l'interrogation des processus et des tâches

Processus de surveillance

L'une des commandes les plus utiles pour obtenir des informations sur les processus est top . Le programme affiche une vue interactive en temps réel des processus en cours d'exécution. C'est l'équivalent en ligne de commande des programmes graphiques tels que le Moniteur système de GNOME ou le Gestionnaire des tâches Windows.

Vous pouvez démarrer le programme supérieur avec la simple commande, top :

Une zone d'en-tête affiche la charge du processeur et l'utilisation de la mémoire. En dessous, le haut montre un tableau contenant un processus par ligne. Les détails incluent le PID, la quantité de puissance CPU disponible utilisée par le processus et le temps CPU total qu'il a consommé. Les informations sont actualisées automatiquement, toutes les trois secondes par défaut.

Il existe de nombreuses options et commandes interactives qui peuvent être utilisées pour modifier le comportement de top. Utilisez la commande man top pour en savoir plus:

Obtenir un instantané des processus actifs

Abréviation de l' état du processus , la commande ps répertorie les processus. Différentes options permettent divers filtrages et ajustements des détails affichés. Par défaut, ps affiche les processus attachés à un terminal et démarrés par l'utilisateur actuel. En d'autres termes, principalement des commandes que vous avez tapées sur la ligne de commande.

Avec la tâche précédente toujours en arrière-plan, la sortie pourrait ressembler un peu à ceci:

 $ ps
PID TTY TIME CMD
35564 ttys000 0:00.00 sleep 100
73998 ttys000 0:00.43 -bash

Comme avec top, ps a de nombreuses options pour contrôler son comportement, et celles-ci peuvent être découvertes via man ps :

Deux des plus utiles, qui sont souvent combinées, sont -e et -f . Ils affichent respectivement les processus appartenant à tous les utilisateurs et les colonnes supplémentaires. Par exemple:

 $ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2020 ? 00:11:22 /sbin/init
root 2 0 0 2020 ? 00:00:00 [kthreadd]
...

Liste des emplois d'arrière-plan

La commande jobs répertorie les jobs d'arrière-plan dans le shell actuel. Pour démontrer son utilisation, démarrez un travail de longue durée en arrière-plan:

 $ du -skh ~ >/tmp/du.txt 2>/dev/null &
[1] 61167

Cette commande calcule l'espace disque total utilisé par votre répertoire personnel, redirigeant sa sortie vers un fichier temporaire.

 $ jobs
[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &

Finalement, lorsque le travail est terminé, une ligne apparaîtra dans votre terminal semblable à:

 [1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null

Envoi de signaux pour terminer les processus

Si vous avez identifié un processus qui se comporte mal, vous devrez peut-être le tuer. Bien que cela semble radical, la commande kill fait partie intégrante de la boîte à outils d'un administrateur système. Il peut envoyer n'importe lequel de plusieurs signaux, qui sont des notifications standard pour contrôler le comportement du processus. Certains signaux courants à envoyer sont SIGINT, SIGTSTP, SIGTERM et SIGKILL.

SIGINT équivaut à appuyer sur ^ C. SIGTSTP équivaut à appuyer sur ^ Z. SIGTERM et SIGKILL sont tous deux des moyens d'arrêter un processus. Le premier envoie une demande au processus, lui donnant une chance de se fermer gracieusement. Ce dernier est une méthode plus extrême pour forcer un processus à abandonner et devrait être utilisé en dernier recours.

La commande kill peut également fonctionner avec des tâches. Par exemple:

 $ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated: 15 sleep 100

En savoir plus: Façons de tuer les programmes qui ne répondent pas sous Linux

Travailler avec des processus et des travaux sous Linux

Les processus et les tâches sont des concepts difficiles à appréhender, en particulier la différence entre eux. Cependant, ils sont l'une des premières étapes vers la compréhension de l'administration système sous Linux. Les jobs sont un moyen pratique d'exécuter simultanément différentes commandes depuis le shell.

Les processus sont un concept de niveau inférieur qui peut également être manipulé et sont au cœur de chaque programme qui s'exécute sur un ordinateur.