Comment exécuter et contrôler les processus en arrière-plan sous Linux

Contenu

Un environnement shell sur un ordinateur Linux.

Utilisez le shell Bash sur Linux pour gérer les processus de premier plan et d'arrière-plan. Vous pouvez utiliser des signaux et des fonctions de contrôle de travail Bash pour vous donner plus de flexibilité dans la façon dont vous exécutez les commandes. Nous vous montrons comment.

Tout sur les processus

Chaque fois qu'un programme s'exécute sur un système d'exploitation Linux ou Unix, une procédure est lancée. "Procédure" est le nom de la représentation interne du programme en cours dans la mémoire de l'ordinateur.. Il existe une procédure pour chaque programme actif. En réalité, il existe une procédure pour presque tout ce qui s'exécute sur votre ordinateur. Cela inclut les composants de votre environnement de bureau graphique (OÙ) Quoi GNOME O et système putain qui sont lancés au début.

Parce que pour peu tout marche? Bon, Bash intégré en tant que CD, pwd, et alias il n'est pas nécessaire de lancer une procédure (O “Generated”) quand ils courent. Bash exécute ces commandes dans l'instance du shell Bash qui s'exécute dans la fenêtre de votre terminal. Ces commandes sont rapides précisément parce qu'elles n'ont pas besoin d'avoir une procédure démarrée pour pouvoir s'exécuter.. (Vous pouvez taper help dans une fenêtre de terminal pour voir la liste des fonctions Bash intégrées).

Les processus peuvent s'exécuter au premier plan, auquel cas ils saisiront votre terminal jusqu'à ce qu'ils soient terminés, ou ils peuvent fonctionner en arrière-plan. Les processus exécutés en arrière-plan ne dominent pas la fenêtre du terminal et vous pouvez continuer à y travailler. Ou au moins, ils ne dominent pas la fenêtre du terminal s'ils ne génèrent pas de sortie d'écran.

Un exemple désordonné

Nous allons commencer un simple ping suivi en cours d'exécution. Nous irons à ping el dominio How-To Geek. Cela fonctionnera comme une procédure de premier plan.

ping www.systempeaker.com

On obtient les résultats attendus, faire défiler la fenêtre du terminal. Nous ne pouvons rien faire d'autre dans la fenêtre du terminal pendant que ping Il est en train de courir. Pour terminer la commande, presse Ctrl+C.

Ctrl+C

L'effet visible de la Ctrl+C est mis en évidence dans la capture d'écran. ping donne un bref résumé puis s'arrête.

Répétons cela. Mais cette fois, nous allons frapper Ctrl+Z au lieu de Ctrl+C. La tâche ne sera pas terminée. Cela deviendra une tâche de fond. On prend le contrôle de la fenêtre du terminal qui nous est retournée.

ping www.systempeaker.com
Ctrl+Z

L'effet visible de la frappe Ctrl+Z est mis en évidence dans la capture d'écran.

Cette fois, on nous dit que la procédure s'arrête. Arrêté ne veut pas dire fini. C'est comme une voiture sur un panneau d'arrêt. Nous ne l'avons pas jeté et jeté. Toujours sur la route, arrêté, En attente de démarrage. La procédure est maintenant un arrière-plan travail.

Les jobs commander listera les emplois qui ont été démarrés dans la session de terminal en cours. Et puisque les emplois sont (inévitablement) processus, en même temps, nous pouvons utiliser le ps commande pour les voir. Utilisons les deux commandes et comparons leurs sorties. Nous utiliserons le T option (Terminal) option pour lister uniquement les processus en cours d'exécution dans cette fenêtre de terminal. Notez qu'il n'est pas nécessaire d'utiliser un tiret - avec lui T option.

travaux
TVP

Les jobs la commande nous dit:

  • [1]: Le nombre entre parenthèses est le numéro du travail. Nous pouvons l'utiliser pour faire référence au travail lorsque nous devons le contrôler avec des commandes de contrôle de travail.
  • +: Le signe plus + montre que c'est le travail qui sera exécuté si nous utilisons une commande de contrôle de travail sans numéro de travail spécifique. C'est ce qu'on appelle le travail par défaut. Le travail par défaut est toujours celui qui a été le plus récemment ajouté à la liste des travaux.
  • Perturbé: La procédure n'est pas en cours.
  • ping www.systempeaker.com: La ligne de commande qui a démarré la procédure.

Les ps la commande nous dit:

  • PID: L'identifiant de la procédure. Chaque procédure a une identification unique.
  • ATS: Le pseudo-télétype (fenêtre de terminal) à partir duquel la procédure a été exécutée.
  • STATISTIQUES: Le statut de la procédure.
  • CONDITIONS MÉTÉOROLOGIQUES: Le temps CPU consommé par la procédure.
  • COMMANDER: La commande qui a démarré la procédure.

Ce sont des valeurs communes pour la colonne STAT:

  • : Sommeil ininterrompu. La procédure est en attente, généralement en attente d'entrée ou de sortie, et il ne peut pas être interrompu.
  • je: Inactif.
  • R: Pressé.
  • S: Rêve interruptible.
  • T: Arrêté par un signal de contrôle de travail.
  • AVEC: Une procédure zombie. La procédure est terminée, mais sa procédure au principal ne l’a pas fait “Nettoyé”.

La valeur de la colonne STAT peut être suivie de l'un de ces indicateurs supplémentaires:

  • <: Tâche à haute priorité (pas agréable pour d'autres processus).
  • Nord: Priorité basse (bon pour d'autres processus).
  • L: la procédure a des pages verrouillées en mémoire (régulièrement utilisé par les processus temps réel).
  • s: Chef de séance. Un leader de session est une procédure qui a lancé des groupes de processus. Un shell est un leader de session.
  • je: Procédure multi-thread.
  • +: Une procédure rapprochée.

Nous pouvons voir que Bash a un état de Ss. Le "S" majuscule nous indique que le shell Bash dort et est interruptible. Dès qu'on en a besoin, répondre à. La “s” les minuscules nous indiquent que le shell est un chef de session.

La commande ping a le statut T. Cela nous dit que ping a été arrêté par un signal de contrôle de travail. Dans cet exemple, C'était le Ctrl+Z nous avions l'habitude de le mettre en arrière-plan.

Les ps T la commande a le statut R, que signifie courir. Les + indique que cette procédure est membre du groupe de premier plan. Alors lui ps T La commande s'exécute au premier plan.

La commande bg

Les bg La commande permet de reprendre une procédure en arrière-plan. Peut être utilisé avec ou sans numéro de tâche. Si vous l'utilisez sans numéro de travail, le travail par défaut passe au premier plan. La procédure est toujours en cours d'exécution en arrière-plan. Je ne peux pas vous envoyer d'entrée.

Si nous émettons le bg commander, nous reprendrons notre ping commander:

bg

Les ping La commande reprend et nous voyons à nouveau la sortie de défilement dans la fenêtre du terminal. Le nom de la commande qui a été redémarrée s'affiche. Ceci est mis en évidence dans la capture d'écran.

le processus de ping en arrière-plan a repris avec la sortie sur une fenêtre de terminal

Mais nous avons un obstacle. La tâche s'exécute en arrière-plan et n'accepte pas les entrées. Ensuite, Comment pouvons-nous l'arrêter? Ctrl+C il ne fait rien. Nous pouvons le voir quand nous l'écrivons, mais la tâche en arrière-plan n'obtient pas ces frappes, donc il continue de pinger joyeusement.

En réalité, maintenant nous sommes en mode combo bizarre. On peut écrire dans la fenêtre du terminal, mais ce que nous écrivons est rapidement balayé par la sortie de déplacement du ping commander. Tout ce que nous écrivons prend effet au premier plan.

Pour arrêter notre tâche en arrière-plan, il faut le mettre au premier plan puis l'arrêter.

La commande fg

Les fg La commande amènera une tâche d'arrière-plan au premier plan. Comme lui bg commander, peut être utilisé avec ou sans numéro de travail. L'utiliser avec un numéro de travail signifie qu'il fonctionnera sur un travail spécifique. Si utilisé sans numéro de travail, la dernière commande envoyée en arrière-plan est utilisée.

Si nous écrivons fg notre ping La commande passera au premier plan. Les caractères que nous tapons sont mélangés avec la sortie du ping commander, mais ils sont exploités par le shell comme s'ils avaient été entrés sur la ligne de commande comme d'habitude. Et en réalité, du point de vue du shell Bash, c'est exactement ce qui s'est passé.

fg

Et maintenant que nous avons le ping la commande s'exécute à nouveau au premier plan, on peut utiliser Ctrl+C le tuer.

Ctrl+C

Nous devons envoyer les bons signaux

Ce n'était pas vraiment joli. Évidemment, l'exécution d'une procédure en arrière-plan fonctionne mieux lorsque la procédure ne produit aucune sortie et ne nécessite aucune entrée.

Mais, en désordre ou pas, notre exemple atteint:

  • Mettre une procédure en arrière-plan.
  • Restaurer la procédure à un état d'exécution en arrière-plan.
  • Remettre la procédure au premier plan.
  • Fin de la procédure.

Lorsque vous utilisez Ctrl+C et Ctrl+Z , envoie des signaux à la procédure. Ceux-ci sont formes abrégées d'utiliser le kill commander. exister 64 différents signaux cette kill Vous pouvez envoyer. Utiliser kill -l sur la ligne de commande pour les lister. kill n'est pas la seule source de ces signaux. Certains d'entre eux sont générés automatiquement par d'autres processus au sein du système.

Voici quelques-uns des plus utilisés.

  • S'INSCRIRE: Signe 1. Envoyé automatiquement à une procédure lorsque le terminal dans lequel elle s'exécute est fermé.
  • SIGINT: Signe 2. Envoyé à une procédure que vous obtenez correctement. Ctrl+C. La procédure est interrompue et vous êtes invité à terminer.
  • SIGQUIT: Signe 3. Envoyé à une procédure si l'utilisateur envoie un signal pour arrêter de fumer Ctrl+D.
  • SIGKILL: Signe 9. La procédure s'arrête immédiatement et ne tentera pas de s'arrêter proprement. La procédure ne se déroule pas gracieusement.
  • SIGTERM: Signe 15. C'est le signal par défaut envoyé par kill. C'est le signal de fin de programme standard.
  • SIGTSTP: Signe 20. Envoyé à une procédure lorsque vous utilisez Ctrl+Z. Arrête la procédure et la met en arrière-plan.

Nous devons utiliser le kill commande pour émettre des signaux auxquels aucune combinaison de touches n'est affectée.

Un meilleur contrôle du travail

Une procédure est passée en arrière-plan grâce à l'utilisation de Ctrl+Z est placé à l'état arrêté. Nous devons utiliser le bg commande pour le faire fonctionner à nouveau. Le démarrage d'un programme en tant que procédure s'exécutant en arrière-plan est facile. Ajouter une esperluette & à la fin de la ligne de commande.

Même s'il est préférable que les processus d'arrière-plan n'écrivent pas dans la fenêtre du terminal, nous utiliserons des exemples qui. Nous devons avoir quelque chose dans les captures d'écran que nous pouvons référencer. Cette commande lancera une boucle sans fin en tant que procédure d'arrière-plan:

tant que c'est vrai; écho “Comment faire la procédure de boucle geek”; dormir 3; Fait &

On nous dit le numéro de travail et l'ID d'identification de la procédure de la procédure. Notre numéro de travail est 1 et l'identification de la procédure est 1979. Nous pouvons utiliser ces identifiants pour contrôler la procédure.

La sortie de notre boucle sans fin commence à apparaître dans la fenêtre du terminal. Comme avant, on peut utiliser la ligne de commande, mais toutes les commandes que nous émettons sont entrecoupées de la sortie de la procédure de boucle.

ls

sortie du processus de boucle d'arrière-plan entrecoupée de la sortie d'autres commandes

Pour arrêter notre procédure, nous pouvons utiliser jobs pour nous rappeler quel est le numéro de travail et ensuite utiliser kill.

jobs informe que notre procédure est le numéro de travail 1. Pour utiliser ce numéro avec kill nous devons le faire précéder d'un signe pourcentage %.

travaux
tuer %1

EN RELATION: Comment fonctionnent les signaux Linux: SIGINT, SIGTERM et SIGKILL

kill envoie le SIGTERM signe, numéro de signe 15, à la procédure et elle se termine. La prochaine fois que vous appuyez sur la touche Entrée, l'état du travail est affiché. Répertorie la procédure comme suit : “fini”. Si la procédure ne répond pas à la kill la commande peut monter d'un cran. Utiliser kill avec SIGKILL , numéro de signe 9. Entrez simplement le numéro 9 Entrez kill numéro de travail de commande.

tuer 9 %1

Choses que nous avons couvertes

  • Ctrl + C: Envoyer SIGINT, signe 2, à la procédure, si vous acceptez l'entrée, et lui dit de finir.
  • Ctrl + ré: Envoyer SISQUIT, signe 3, à la procédure - si vous acceptez la saisie - et vous demande de quitter.
  • Ctrl + AVEC: Envoyer SIGSTP, signe 20, à la procédure et vous dit d'arrêter (suspendre) et devenir une procédure de fond.
  • travaux: Répertorier les tâches d'arrière-plan et afficher leur numéro de tâche.
  • bg numéro de travail: Redémarrer une procédure en arrière-plan. Si vous ne fournissez pas de numéro de travail, la dernière procédure qui est devenue une tâche d'arrière-plan est utilisée.
  • fg numéro de travail: met une procédure d'arrière-plan au premier plan et la redémarre. Si vous ne fournissez pas de numéro de travail, la dernière procédure qui est devenue une tâche d'arrière-plan est utilisée.
  • ligne de commande ET: Ajouter une esperluette & à la fin d'une ligne de commande, exécutez cette commande en tâche de fond, qui court.
  • tuer %numéro de travail: Envoyer SIGTERM, signe 15, à la procédure pour le terminer.
  • tuer 9 %numéro de travail: Envoyer SIGKILL, signe 9, à la procédure et la termine brusquement.

EN RELATION: Comment tuer les processus du terminal Linux

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.