Quelle est la différence entre un travail et un processus?

Réponses:

46

Un processus est un programme en cours d'exécution avec son propre espace d'adressage.

Un travail est un concept utilisé par le shell: tout programme démarré de manière interactive qui ne se détache pas (c’est-à-dire qui n’est pas un démon) est un travail. Si vous exécutez un programme interactif, vous pouvez appuyer sur CtrlZpour le suspendre. Ensuite, vous pouvez le redémarrer au premier plan (avec fg) ou en arrière-plan (avec bg).

Pendant que le programme est suspendu ou s’exécute en arrière-plan, vous pouvez démarrer un autre programme. Deux tâches seraient alors exécutées. Vous pouvez également lancer un programme en cours d'exécution en arrière - plan en ajoutant un « & » comme ceci: program &. Ce programme deviendrait un travail de fond. Pour répertorier tous les travaux que vous exécutez, vous pouvez utiliser jobs.

Pour plus d'informations sur les tâches, voir cette section de la page de manuel bash.

Shawn J. Goff
la source
Dans l'exemple ci-dessus, lorsque deux tâches sont en cours d'exécution, nous en avons également deux , n'est-ce pas? Pourriez-vous préciser le sens de son propre espace d'adressage ? Dans quel cas un programme n'a pas son propre espace d'adressage?
Kenny
@ Kenny Oui, ces tâches tro seraient également des processus. En fait, chaque travail est un processus. Un travail est lié à votre session elle va. Chaque processus que vous démarrez qui ne se détache pas de votre terminal est un travail.
Shawn J. Goff
@Kenny, en ce qui concerne les processus, quand je parle de programme, c’est une chose très générale: un ensemble d’instructions ordonnées à exécuter par la CPU. Cela s'appelle également une tâche ou un thread d'exécution. Un processus peut créer un autre thread qui partage son espace d'adressage.
Shawn J. Goff
1
Les commandes piped telles que in ls | sortest un travail, mais chaque commande s'exécute en tant que processus enfant d'un processus de sous-shell différent. Ceci est un exemple de travail composé de plusieurs processus. Comment votre définition d'un travail peut-elle expliquer qu'un travail peut comporter plusieurs processus?
Tim
30

UNIX a des concepts distincts "processus", "groupe de processus" et "session".

Chaque shell que vous obtenez lors de la connexion devient le responsable de sa propre session et de son groupe de processus et définit le groupe de processus de contrôle du terminal sur lui-même.

Le shell crée un groupe de processus dans la session en cours pour chaque "travail" qu'il lance et place chaque processus démarré dans le groupe de processus approprié. Par exemple, ls | headest un pipeline de deux processus que le shell considère comme une tâche unique et qui appartiendra à un nouveau groupe de processus unique.

Un processus est un (ensemble de) threads d'exécution et d'autres contextes, tels qu'un espace d'adressage et une table de descripteur de fichier. Un processus peut démarrer d'autres processus; ces nouveaux processus appartiendront au même groupe de processus que le parent sauf si d'autres actions sont entreprises. Chaque processus peut également avoir un "terminal de contrôle", qui démarre comme son père.

Le shell a le concept de travail "de premier plan" et de "travail de fond". Les travaux en avant-plan sont des groupes de processus avec le contrôle du terminal, et les travaux en arrière-plan sont des groupes de processus sans contrôle du terminal.

Chaque terminal a un groupe de processus de premier plan. Lorsqu’un travail est affiché au premier plan, le shell le définit comme groupe de processus d’avant-plan du terminal; Lorsqu'il place une tâche en arrière-plan, le shell définit le groupe de processus de premier plan du terminal sur un autre groupe de processus ou lui-même.

Les processus peuvent lire et écrire sur leur terminal de contrôle s'ils font partie du groupe de processus de premier plan. Sinon, ils reçoivent SIGTTINet SIGTTOUsignale les tentatives de lecture et d’écriture sur le terminal, respectivement. Par défaut, ces signaux interrompent le processus, même si la plupart des shells masquent le SIGTTOUtravail en arrière-plan pour pouvoir écrire sur le terminal sans interruption.

éphémère
la source
1
Ceci est un bon aperçu concis de la gestion des processus shell et terminal. Il pourrait être amélioré en mentionnant qu'un "travail" est un "pipeline", qui peut être plus d'un processus connecté entre eux dans un groupe de processus.
Chris Page
1

En informatique, un Job est une unité de travail ou une unité d'exécution (qui exécute ledit travail). Un composant d'un travail (en tant qu'unité de travail) est appelé une tâche ou une étape (si elle est séquentielle, comme dans un flot de travaux). En tant qu’unité d’exécution, un travail peut être identifié de manière concrète avec un processus unique, lequel peut à son tour comporter des sous-processus (processus enfants; le processus correspondant au travail étant le processus parent) qui exécutent les tâches ou les étapes qui composent le travail du serveur. emploi; ou avec un groupe de processus; ou avec une référence abstraite à un processus ou à un groupe de processus, comme dans le contrôle de travail Unix.

La source

beaux exemples

Premraj
la source
-1

Les définitions ci-dessus sont très techniques, mais l’opérateur souhaitait peut-être une clarification supplémentaire au jour le jour. Je pense qu'un travail est un processus planifié. Lorsque nous traitons de processus en général, il n’ya pas nécessairement la notion d’horaire, mais lorsque nous utilisons le mot "travail", nous entendons toujours qu’il est planifié ou répétitif comme une boucle, c’est comme un travailleur.

Eloone
la source
1
S'il vous plaît expliquer les votes vers le bas si vous souhaitez voter. Si cette réponse est incorrecte, expliquez au moins pourquoi vous pensez que ce n'est pas le cas. Jusqu'à présent, je pense toujours que ma réponse a du sens, c'est le genre d'explication que je cherchais.
Eloone
Je conviens que celui qui a voté aurait dû expliquer pourquoi. Mais je pense que la raison du vote négatif est que votre définition du "travail" n'est tout simplement pas correcte.
Prograde
Vous voulez expliquer pourquoi ce n'est pas correct? "Job" n'est pas clairement défini comme ce qu'est un "processus" (avec PID dans le système). D'après mon expérience, "travail" a toujours été un mot utilisé pour définir un certain type de processus qui était souvent planifié et en arrière-plan, et que vous pouvez lancer. C'est pourquoi il est difficile à définir parce que l'utilisation le définit. Il peut également s'agir d'un groupe de processus, mais il en va de même d'un "conteneur" (LXC), mais un "conteneur" n'est pas un "travail". Un processus lancé tel que "nginx" n'est pas non plus un "travail". Mon commentaire ajoute encore qch à la réponse. Encore une fois, cela répond à ce que j'essayais de comprendre.
Eloone
Je cherche aussi toujours une définition correcte, alors je suis désolé, je ne peux pas (encore) répondre. Mais ce qui n'est pas correct, c'est qu'il faudrait que ce soit programmé.
Prograde