Was ist der Unterschied zwischen einem "Job" und einem "Prozess"?
Was ist der Unterschied zwischen einem "Job" und einem "Prozess"?
Antworten:
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.
ls | sort
sind 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?
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 | head
handelt 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 SIGTTIN
und SIGTTOU
signalisieren sie den Versuch, vom Terminal zu lesen bzw. auf dieses zu schreiben. Standardmäßig unterbrechen diese Signale den Prozess, obwohl die meisten Shells maskieren, SIGTTOU
sodass ein Hintergrundjob ohne Unterbrechung auf das Terminal schreiben kann.
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.
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.