Was ist der Unterschied zwischen einem Job und einem Prozess?


Antworten:


46

Ein Prozess ist ein laufendes Programm mit einem eigenen Adressraum.

Ein Job ist ein Konzept, das von der Shell verwendet wird. Jedes Programm, das Sie interaktiv starten und das sich nicht löst (dh kein Daemon), ist ein Job. Wenn Sie ein interaktives Programm ausführen, können Sie drücken CtrlZ, um es anzuhalten. Dann können Sie es wieder im Vordergrund (mit fg) oder im Hintergrund (mit bg) starten .

Während das Programm angehalten wird oder im Hintergrund ausgeführt wird, können Sie ein anderes Programm starten. Dann würden zwei Jobs ausgeführt. Sie können auch ein Programm im Hintergrund laufen beginnen , indem ein „&“ wie folgt angehängt: program &. Dieses Programm würde zu einem Hintergrundjob werden. Um alle Jobs aufzulisten, die Sie ausführen, können Sie verwenden jobs.

Weitere Informationen zu Jobs finden Sie in diesem Abschnitt der Bash-Manpage.


Wenn im obigen Beispiel zwei Jobs ausgeführt werden , werden auch zwei Prozesse ausgeführt , nicht wahr? Könnten Sie die Bedeutung des eigenen Adressraums erläutern ? In welchem ​​Fall hat ein Programm keinen eigenen Adressraum?
Kenny

@Kenny ja, diese tro Jobs wären auch Prozesse. In der Tat ist jeder Job ein Prozess. Ein Job hängt mit Ihrer Sitzung zusammen. Jeder Prozess, den Sie starten und der nicht von Ihrem Zeitrahmen abweicht, ist ein Job.
Shawn J. Goff

@Kenny, was Prozesse angeht, wenn ich Programm sage, ist das eine sehr allgemeine Sache - ein Satz von befohlenen Anweisungen, die die CPU ausführen soll. Dies wird auch als Task oder Ausführungsthread bezeichnet. Ein Prozess erstellt möglicherweise einen anderen Thread, der seinen Adressraum freigibt.
Shawn J. Goff

1
weitergeleitete Befehle wie in ls | sortsind ein Job, aber jeder Befehl wird als untergeordneter Prozess eines anderen Subshell-Prozesses ausgeführt. Dies ist ein Beispiel für einen Job, der aus mehreren Prozessen besteht. Wie kann Ihre Definition eines Jobs erklären, dass ein Job aus mehreren Prozessen bestehen kann?
Tim

30

UNIX hat separate Konzepte "Prozess", "Prozessgruppe" und "Sitzung".

Jede Shell, die Sie beim Anmelden erhalten, wird zum Leiter ihrer eigenen neuen Sitzung und Prozessgruppe und legt die steuernde Prozessgruppe des Terminals auf sich selbst fest.

Die Shell erstellt innerhalb der aktuellen Sitzung für jeden "Job", den sie startet, eine Prozessgruppe und ordnet jeden Prozess, den sie startet, der entsprechenden Prozessgruppe zu. Beispielsweise ls | headhandelt es sich um eine Pipeline von zwei Prozessen, die von der Shell als ein einzelner Job betrachtet werden und zu einer einzelnen neuen Prozessgruppe gehören.

Ein Prozess ist eine (Sammlung von) Ausführungssträngen und ein anderer Kontext, z. B. Adressraum und Dateideskriptortabelle. Ein Prozess kann andere Prozesse starten. Diese neuen Prozesse gehören zu derselben Prozessgruppe wie der übergeordnete Prozess, sofern keine anderen Maßnahmen ergriffen werden. Jeder Prozess kann auch ein "steuerndes Terminal" haben, das mit dem übergeordneten Terminal beginnt.

Die Shell hat das Konzept von "Vordergrund" -Jobs und "Hintergrund" -Jobs. Vordergrundjobs sind Prozessgruppen mit Steuerung des Terminals und Hintergrundjobs sind Prozessgruppen ohne Steuerung des Terminals.

Jedes Terminal verfügt über eine Vordergrundprozessgruppe. Wenn Sie einen Job in den Vordergrund bringen, wird er von der Shell als Vordergrundprozessgruppe des Terminals festgelegt. Wenn Sie einen Job in den Hintergrund stellen, setzt die Shell die Vordergrundprozessgruppe des Terminals auf eine andere Prozessgruppe oder auf sich selbst.

Prozesse können von ihrem steuernden Terminal lesen und auf dieses schreiben, wenn sie sich in der Vordergrundprozessgruppe befinden. Andernfalls empfangen SIGTTINund SIGTTOUsignalisieren sie den Versuch, vom Terminal zu lesen bzw. auf dieses zu schreiben. Standardmäßig unterbrechen diese Signale den Prozess, obwohl die meisten Shells maskieren, SIGTTOUsodass ein Hintergrundjob ohne Unterbrechung auf das Terminal schreiben kann.


1
Dies ist eine gute, übersichtliche Übersicht über das Shell- und Terminal-Prozessmanagement. Es könnte verbessert werden, wenn erwähnt wird, dass ein „Job“ eine „Pipeline“ ist, bei der es sich um mehrere Prozesse handeln kann, die in einer Prozessgruppe miteinander verbunden sind.
Chris Seite

1

Beim Rechnen ist ein Job eine Arbeitseinheit oder eine Ausführungseinheit (die die Arbeit ausführt). Eine Komponente eines Jobs (als Arbeitseinheit) wird als Task oder als Schritt bezeichnet (wenn sequentiell, wie in einem Jobstrom). Als Ausführungseinheit kann ein Job konkret mit einem einzelnen Prozess identifiziert werden, der wiederum Unterprozesse (untergeordnete Prozesse; der Prozess, der dem Job entspricht, ist der übergeordnete Prozess) aufweisen kann, die die Aufgaben oder Schritte ausführen, aus denen die Arbeit von besteht Job; oder mit einer Prozessgruppe; oder mit einem abstrakten Verweis auf einen Prozess oder eine Prozessgruppe, wie in der Unix-Jobsteuerung.

Quelle

schöne Beispiele


-1

Die obigen Definitionen sind sehr technisch, aber vielleicht wollte die Operation mehr Klarheit von Tag zu Tag. Ich denke, dass ein Job ein geplanter Prozess ist. Wenn wir uns mit Prozessen im Allgemeinen befassen, gibt es nicht unbedingt den Begriff Zeitplan, aber wenn wir das Wort "Job" verwenden, meinen wir immer, dass es geplant ist oder sich wie eine Schleife wiederholt, es ist wie ein Arbeiter.


1
Bitte erläutern Sie die Stimmen, wenn Sie abstimmen möchten. Wenn diese Antwort nicht korrekt ist, erklären Sie zumindest, warum Sie denken, dass sie nicht korrekt ist. Bis jetzt denke ich immer noch, dass meine Antwort Sinn macht, es ist die Art von Erklärung, nach der ich gesucht habe.
Eloone

Ich bin damit einverstanden, dass derjenige, der abgelehnt hat, erklärt haben sollte, warum. Aber ich denke, der Grund für die Ablehnung ist, dass Ihre Definition von "Job" einfach nicht korrekt ist.
prograde

Möchtest du erklären, warum es nicht korrekt ist? "Job" ist nicht so klar definiert wie ein "Prozess" (mit PID im System). Meiner Erfahrung nach war "Job" immer ein Wort, das verwendet wurde, um eine bestimmte Art von Prozess zu definieren, der häufig geplant und im Hintergrund ausgeführt wurde und den Sie starten können. Deshalb ist es schwierig zu definieren, weil die Verwendung es definiert. Es kann sich auch um eine Gruppe von Prozessen handeln, aber es handelt sich auch um einen "Container" (LXC), aber ein "Container" ist kein "Job". Ein gestarteter Prozess wie "nginx" ist ebenfalls kein "Job". Mein Kommentar fügt der Antwort noch etwas hinzu. Wieder antwortet es, was ich zu verstehen versuchte.
Eloone

Ich bin auch noch auf der Suche nach einer richtigen Definition. Es tut mir leid, ich kann (noch) nicht antworten. Was aber nicht stimmt, ist, dass es geplant werden müsste.
prograde
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.