Quelle est la différence entre un "travail" et un "processus"?
Un processus est tout programme en cours d'exécution avec son propre espace d'adressage.
Un travail est un concept utilisé par la coquille - tout programme que vous démarrez de manière interactive qui ne se détache pas (c'est-à-dire pas un démon) est un travail. Si vous exécutez un programme interactif, vous pouvez appuyer sur CtrlZ la suspendre. Ensuite, vous pouvez le démarrer au premier plan (en utilisant fg
) ou en arrière-plan (en utilisant bg
).
Bien que le programme soit suspendu ou en cours d'exécution en arrière-plan, vous pouvez commencer un autre programme - vous auriez alors deux emplois en cours d'exécution. Vous pouvez également commencer un programme en cours d'exécution en applant un "&" comme ceci: program &
. Ce programme deviendrait un travail d'arrière-plan. Pour répertorier tous les travaux que vous exécutez, vous pouvez utiliser jobs
.
Pour plus d'informations sur les emplois, voir cette section de la page Bash Man.
Unix a des concepts distincts "processus", "groupe de processus" et "session".
Chaque coquille que vous obtenez à la connexion devient le chef de son propre nouveau groupe de session et de processus, et définit le groupe de processus de contrôle du terminal à lui-même.
Le shell crée un groupe de processus au sein de la session en cours pour chaque "travail" qu'elle lance et place chaque processus qu'il commence dans le groupe de processus approprié. Par exemple, ls | head
est un pipeline de deux processus que la coquille considère un travail unique et appartiendra à un nouveau groupe de processus.
Un processus est un (collection de) filetage de l'exécution et d'autres contextes, tels que l'espace d'adressage et la table descripteur de fichier. Un processus peut démarrer d'autres processus; Ces nouveaux processus appartiendront au même groupe de processus que le parent à moins que d'autres mesures soient prises. Chaque processus peut également avoir un "terminal de contrôle", qui commence la même chose que son parent.
La coquille a le concept d'emplois "premier plan" et de "fond". Les travaux de premier plan sont des groupes de processus avec le contrôle du terminal et les travaux de base sont des groupes de processus sans contrôle du terminal.
Chaque terminal a un groupe de processus de premier plan. Lorsque vous apportez un emploi au premier plan, la coquille l'établit en tant que groupe de processus de premier plan du terminal; Lorsque vous mettez un emploi à l'arrière-plan, le shell définit le groupe de processus de premier plan du terminal vers un autre groupe de processus ou lui-même.
Les processus peuvent lire et écrire à leur terminal de contrôle s'ils se trouvent au premier plan de processus. Sinon, ils reçoivent SIGTTIN
et SIGTTOU
signaux sur tentatives de lecture et d'écriture respectivement sur le terminal. Par défaut, ces signaux suspendent le processus, bien que la plupart des coquilles masque SIGTTOU
de sorte qu'un travail d'arrière-plan puisse écrire sur le terminal ininterrompu.
En informatique, un travail est une unité de travail ou unité d'exécution (qui effectue ledit travail). Un composant d'un travail (comme unité de travail) s'appelle une tâche ou une étape (si séquentiel, comme dans un flux d'emploi). En tant qu'unité d'exécution, un travail peut être concrètement identifié avec un seul processus, qui peut à son tour avoir des sous-processus (processus d'enfants; le processus correspondant au travail étant le processus parent) qui effectuent les tâches ou les étapes qui comprennent le travail de la travail; 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 des tâches UNIX.