2009-10-02 7 views
7

Veuillez indiquer la différence entre un ID de groupe de processus et un ID de travail. Jobid est-il intégré à un programme shell ou est-il lié au noyau? Quelles sont les utilisations de chacun d'eux? Quand un processus est exécuté en arrière-plan, seul le jobid est-il défini ou le pgid est-il également défini? Quelles sont les utilisations de la fonction setpgid()?Différence entre l'ID du groupe de processus et l'ID du travail sous UNIX

Lorsqu'un processus est exécuté en arrière-plan, le noyau est-il également impliqué ou le shell s'occupe-t-il de l'arrière-plan ou du premier plan?

Répondre

13

Bonnes questions. L'identifiant du travail est principalement une construction shell. Il y a un support dans le noyau sous la forme des signaux qui sont impliqués dans le contrôle du travail, et la façon dont le noyau sait exactement à quels processus envoyer les signaux de contrôle du travail.

Strictement parlant, la réponse à votre première question est que l'ID du travail est purement une création de coquille. Il existe parce qu'un pipeline (ou, rarement, un autre assemblage groupé) peut être constitué de plusieurs processus qui doivent être contrôlés en tant qu'unité.

Pour répondre à votre dernière question, le shell démarre tous les processus en commençant par fork(2), puis en faisant execve(2). La seule différence avec & est que le shell ne fait pas wait(2) (ou une variante associée) et donc le programme peut continuer "en arrière-plan". Il y a en fait peu de distinction entre Unix et l'arrière-plan.

Le groupe de processus est une association définie par des shells afin que le noyau connaisse un seul processus de «premier plan» qui gère un ensemble de processus «d'arrière-plan» différents. Ceci est principalement important pour que les processus d'arrière-plan génèrent un signal s'ils décident de lire soudainement à partir d'un terminal. (Ce terminal étant probablement connecté à une entrée standard.) Le "travail" va générer un signal et le shell demandera à l'utilisateur de faire quelque chose.

Essayez (sleep 5; read x)& et après 6 secondes tapez un retour ou quelque chose de sorte que le shell se réveille. C'est quand vous voyez quelque chose comme ...

[1] + Stopped (sommeil 5; lire x)

... et vous tapez ensuite fg pour le tirer au premier plan. A l'origine, Unix avait des pipelines, et il avait &, mais il n'y avait aucun moyen de déplacer une commande ou un pipeline entre premier plan et arrière-plan et aucun moyen d'aider un processus en arrière-plan qui a soudainement décidé de lire l'entrée standard.

Le contrôle du travail et le support du noyau ont été ajoutés par Bill Joy et d'autres dans les premières versions de BSD et csh (1). Ceux-ci ont été ramassés ligne par ligne par Unix commercial et clonés pour le noyau Linux de travail.


En ce qui concerne les questions concernant les groupes de processus et ps(1) ... Afin de soutenir le contrôle de l'emploi dans les coquilles, l'état du processus du noyau comprend un ID de groupe de processus et un ID de session. Un groupe de processus et un travail sont la même chose, mais un numéro de travail est juste une poignée de la coque constitue. Un processus est un chef de session si l'identifiant de session est le même que le pid, et un processus est un chef de groupe de processus si le pgid est le même que le pid.Je crois que quelque chose d'un peu plus subtil se produit avec les tirages ps(1)+. Chaque terminal sait quel est son groupe de processus de premier plan, donc je crois qu'un processus obtient un + si pid == pgid & & (pgid est le premier plan pg pour son terminal de contrôle). En résumé, le noyau conserve plusieurs éléments d'état: pid, pgid, sid, et un processus peut avoir un terminal de contrôle et un terminal peut avoir un pgid de premier plan. Ces informations d'identification sont principalement destinées à prendre en charge le contrôle des tâches, mais sont également utilisées pour révoquer l'accès à un terminal lorsqu'un utilisateur se déconnecte.

+0

Par exemple pour le groupe de processus, à quoi sert le groupe de processus. Veuillez expliquer en détail comment le groupe de processus est impliqué. – avd

+0

Encore une chose, vous avez écrit que le processus de premier plan contrôle les processus d'arrière-plan, pouvez-vous m'en donner un exemple? – avd

+0

Désolé encore un doute, vous avez écrit que l'ID de travail est construit de shell, donc le premier plan/arrière-plan est la compréhension de shell, mais quand nous faisons "ps", il apparaît dans les statistiques comme "R" ou "R +" mais ps est exécuté par le noyau, alors comment le noyau sait-il que le travail est en arrière-plan? – avd

Questions connexes