Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

Linux : Les services système

Arrêter et démarrer un processus

Testez gratuitement nos 1341 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Yves Rougy vous explique comment arrêter un processus récalcitrant. Voyez également comment lancer un processus en tâche de fond avec le terminal.
06:52

Transcription

Alors, tous ces processus qui tournent dans la machine qui représentent des programmes en cours d'exécution, à un moment donné, ils ont été démarrés. Soit ils ont été démarrés par « systemd » lors du boot de la machine ou avec la commande « systemctl » quand il s'agit de [inaudible], on a vu ça dans la première partie de cette formation, soit ils ont été lancés par un utilisateur. Simplement, quand je tape vi ici, ça va me créer un processus VI qui va s'exécuter dans la mémoire de la machine. Et quand je vais faire « :q », le processus va s'arrêter. Maintenant, je vais me poser d'autres questions. C'est que là, mon processus vi, je peux le démarrer, il est interactif. Je peux travailler dessus. Qu'est-ce qu'il se passe si je veux l'arrêter sans être en interaction avec lui ? Je peux avoir la même problématique si jamais je fais un « ps-ef », que je fais derrière un « grep firefox ». J'ai un Firefox qui tourne. Il n'est pas à l'écran. Il est derrière, mais je ne veux pas l'amener en premier plan. Je vais le laisser tourner derrière, dans la fenêtre Firefox. Et pourtant, j'aimerais bien pouvoir l'arrêter, et proprement. Comment je vais faire ? Pour faire cette action, dans nos systèmes, on a des outils qui permettent d'envoyer des signaux aux différents processus. Donc, je vais envoyer un signal à mon processus Firefox, lui demandant de s'arrêter. Alors, attention avec cette commande qui envoie des signaux. Elle est extrêmement mal nommée, parce qu'elle s'appelle commande « kill ». Elle ne va pas tuer de processus, elle va envoyer un signal à un processus. Quel signal ? Si je fais un « kill-l », il va me lister les différents signaux qui sont possibles d'être envoyé au processus. Et celui qui va m'intéresser en premier lieu, c'est le processus SIGTERM. Ce processus SIGTERM, qu'est-ce qu'il va faire ? Il va envoyer un signal demandant au processus de s'arrêter. Comment je vais faire ça ? Je vais faire un « kill ». Soit je fais un -15 parce que le numéro du SIGTERM c'est 15. Mais ce que je peux faire aussi, c'est faire un -TERM ou -SIGTERM. Il trouvera le bon numéro pour lui. Et derrière la commande « kill », je vais marquer le numéro du processus auquel je souhaite envoyer le message. Voilà, je fais « kill-TERM ». J'appuie sur Entrée. Mon processus Firefox a reçu une demande lui demandant : « Est-ce que tu peux t'arrêter s'il te plaît ? ». Si je refais ma commande ps, je n'ai plus de Firefox dans la mémoire. Et j'ai arrêté mon Firefox proprement, comme si j'étais allé dans le menu et fais Quitter. Ça, pour arrêter un processus, c'est la première façon de faire. Si jamais il ne réagit pas à cette manière-là, il y a une deuxième manière de faire qui est l'équivalent de faire un Ctrl+C. L'équivalent du Ctrl+C, c'est le signal SIGINT. INT comme « interrupt », on va interrompre le processus. Donc, évidemment, on va faire un « kill-INT » du processus. Et s'il ne veut toujours pas s'arrêter, à ce moment-là, on pourra peut-être se poser la question si on lui envoie un SIGKILL. Le SIGKILL, il est méchant. Qu'est-ce qu'il va faire ? Il ne va pas demander l'avis au processus. C'est le noyau qui transmet les signaux. Là, en gros, quand j'utilise la commande « kill », ma commande « kill », ici, elle envoie un signal au noyau qui retransmet le signal au processus. C'est le noyau qui est au cœur de tout ça. Au lieu de directement dire au processus : « Arrête-toi s'il te plaît », si j'envoie le « kill-9 », donc le SIGKILL, le noyau, au lieu de relayer le signal, va directement supprimer le processus de la mémoire, sans rien envoyer au processus, sans rien dire au processus. Alors, ça ne fonctionnerait qu'avec les processus dont je suis propriétaire, ou si je suis « root », ça marchera pour tous les processus. Mais le problème d'utiliser le SIGKILL, c'est qu'on va supprimer de la mémoire un processus en cours de fonctionnement et on ne va pas regarder s'il a bien désalloué toute la consommation, les ressources qu'il avait allouées et qu'il consommait. S'il a ouvert des fichiers qui commençaient à écrire des données dans des fichiers, il va arrêter là où il en était. Il va pas les fermer proprement. Il peut y avoir des données manquantes, ça peut les corrompre. Donc le SIGKILL, il est à utiliser vraiment en dernier recours. Alors, je vais encore une fois relancer mon Firefox. Mais cette fois, en ligne de commande parce que ça va un peu changer les choses. Si je lance mon Firefox en ligne de commande, il va s’exécuter. Voilà, je reviens à mon terminal. J'ai mon Firefox qui s'exécute en tâche de fond. Maintenant que Firefox s'exécute en tâche de fond, je voudrais reprendre la main sur ma ligne de commande. Pour ça, je peux faire un Ctrl+Z, il va suspendre l'exécution du processus et je vais pouvoir continuer à travailler. Seulement là, mon processus Firefox est stoppé. Il n'a plus accès au CPU, donc il ne peut plus afficher de page web. Ce qui dommage, je voudrais quand même qu'il puisse accéder aux pages web. Pour ça, en faisant fg, « foreground », je peux ramener mon processus en avant-plan. Mais je n'ai plus accès à mon « shell », donc, peut-être que la bonne opération, ce serait de faire bg, comme « background », arrière-plan. Et si jamais je fais bg, mon processus, voyez qu'il a rajouté une esperluette. Le processus Firefox est passé en arrière-plan. Le processus Firefox fonctionne. Tout va bien, mais moi, j'ai toujours récupéré la main, ici, et je peux continuer à travailler. Si jamais mon processus Firefox veut afficher des messages sur le terminal, il affichera les messages à l'endroit où se trouve le curseur. Ça pourra polluer ma sortie, mais ça ne va pas gêner les autres processus qui accèdent au terminal. Et de cette manière-là, j'ai deux processus qui tournent en parallèle. Le vi, si je le lance, par exemple. Le vi et le Firefox sont attachés, pour l'instant, tous les deux, au terminal. S'ils affichent quelque chose sur leur sortie standard, ça va s'afficher, ici, sur le terminal. Alors, c'est extrêmement pratique de faire ça. Moi, je l'utilise beaucoup, par exemple, quand j'utilise un fichier avec vi. J'édite un fichier et je veux aller vérifier quelque chose pour continuer l'édition du fichier. Je ne vais pas quitter mon vi, je fais un Ctrl+Z et ça suspend l'utilisation du vi. Donc, j'ai accès à ma ligne de commande, je fais ma vérification. J'ai vérifié ce que je voulais. Je veux ramener mon vi en avant-plan. Je fais fg comme « foreground ». Je le ramène en avant-plan. J'ai pas eu besoin d'enregistrer ce que je faisais, de faire d'autres opérations. Tout ce que j'ai fait, c'est suspendre l'exécution du vim et j'ai repris, en avant-plan, l'exécution du vim. Là je vais faire « Echap, :q! » pour pouvoir quitter vi sans enregistrer ce que j'ai changé. Donc là, c'est différentes manières que l'on a pour communiquer avec nos processus, de les arrêter proprement, de les lancer et de récupérer la main sur le terminal. Pour mon Firefox, au lieu du Ctrl+Z, j'aurais pu directement rajouter l'esperluette, Firefox &. Ça l'aurait directement lancé en tâche de fond.

Linux : Les services système

Découvrez les services qui tournent en permanence sur votre système et adaptez-les en fonction de vos besoins. Abordez la gestion des logs, la synchronisation horaire, etc.

2h16 (22 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Thématiques :
IT
Systèmes d'exploitation
Spécial abonnés
Votre/vos formateur(s) :
Date de parution :25 avr. 2017
Durée :2h16 (22 vidéos)

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !