Hier ist eine allgemeine Definition eines Hintergrundprozesses:
„Ein Hintergrundprozess ist ein Programm, das ohne Benutzereingabe ausgeführt wird. A. Die Anzahl der Hintergrundprozesse kann auf einem Multitasking-Betriebssystem wie Linux ausgeführt werden, während der Benutzer mit dem Vordergrundprozess interagiert. Einige Hintergrundprozesse, wie z. B. Dämonen, erfordern keine Benutzereingaben. Andere befinden sich lediglich vorübergehend im Hintergrund Der Benutzer ist mit dem Programm beschäftigt, das derzeit im Vordergrund ausgeführt wird. Damit der andere Prozess bis zur Aktivierung schlafen und Swap-Speicherplatz beanspruchen kann, ist er derzeit ein Hintergrundprozess. „
Angesichts dieser Definition Wäre das nicht ein Prozess wie Apache2 zu einem Hintergrundprozess, da er niemals mit Benutzereingaben im Terminal interagiert? Und würde dies nicht die meisten Prozesshintergrundprozesse berücksichtigen, da die meisten Prozesse, die auf einem System ausgeführt werden, keine Benutzereingaben im Terminal verarbeiten? Seltsamerweise würde ich persönlich Apache2 nicht als Hintergrundprozess betrachten, da ein Benutzer über http-Anforderungen (nur kein Terminal) mit ihm interagiert.
Kommentare
- Ich denke, hier gibt es zwei Definitionen. Eine betrifft Benutzereingaben (ob ein Prozess Benutzereingaben wie das Terminal akzeptieren kann). Die andere ist, ob ein Prozess schläft und auf dem Swap Space sitzt oder nicht. Hier können Sie Beziehen Sie sich auf beide als Hintergrundprozesse, was den Begriff verwirrend macht.
Antwort
Ein Vordergrundprozess tut dies nicht Benutzerinteraktion erforderlich. Sie können
cp very_large_file destination
ausführen. Dies würde Ihr Terminal blockieren, bis der Kopiervorgang abgeschlossen ist, und als Vordergrundprozess ohne Benutzerinteraktion betrachtet werden Hier ist, ob der Prozess die Ausführung anderer Prozesse blockiert, bis er beendet wird.
Zwei Möglichkeiten Machen Sie einen Vordergrundprozess in den Hintergrund:
1- Hinzufügen eines kaufmännischen Und ( & ) am Ende Ihrer Befehlszeile:
cp very_large_file destination &
2- Stoppen Sie einen Vordergrundprozess und bringen Sie ihn in den Hintergrund:
cp very_large_file destination
STRG + Z
bg
Jetzt würde apache2
definitiv als zählen Hintergrundprozess: Ja, Sie können über http-Anforderungen mit ihm interagieren, aber er wartet einfach auf Port 80 (standardmäßig) und wartet auf eine solche Anforderung: Er blockiert das System nicht, bis der Benutzer eine Anforderung stellt.
Und warum treten bei den meisten Prozessen Probleme auf, die als Hintergrundprozesse betrachtet werden? Dies ist in der Tat normal in einem „Multitasking-Betriebssystem“.
Kommentare
- Aus Neugier, wenn ich ein Programm habe, das aber blockiert es läuft in einer GNU-Bildschirmsitzung oder tmux, und dann lasse ich diese Bildschirm- / tmux-Sitzung und kehre die Steuerung zum Terminal zurück (aber natürlich ignorieren sie das HUP-Signal (Hangup), damit sie noch laufen), würden sie als Hintergrund betrachtet Prozess? Ich denke, Sie würden argumentieren, dass sie Vordergrundprozesse sind, da sie innerhalb ihrer Sitzung blockieren, obwohl sie nicht im Hauptterminal blockieren.
- @JohnMerlino Ich würde sagen, dass
screen
/tmux
ist in diesem Fall der Vordergrundprozess, und wenn Sie " die Steuerung an ein Terminal Sie senden es in den Hintergrund.
Antwort
Es gibt zwei gebräuchliche Definitionen von „Hintergrundprozess“, einer allgemein und einer präzise und spezifisch für Unix.
Im weitesten Sinne können Sie „Hintergrundprozess“ jeden Prozess nennen, der nicht mit dem Benutzer interagiert, der am sitzt Konsole. In diesem Sinne ist Apache ein Hintergrundprozess.
In der Unix-Terminologie hat „Hintergrundprozess“ eine genaue Definition. Ein Hintergrundprozess ist ein Prozess, der von einem Terminal aus gestartet wird, derzeit jedoch nicht mit dem ter interagieren kann minal. (Ich vereinfache, indem ich Prozessgruppen nicht berücksichtige.) Normalerweise erhalten Sie einen Hintergrundprozess, indem Sie einen Hintergrundjob in einer Shell starten:
$ myprogram & [1] 12345 $
oder indem Sie a starten Programm, setzen Sie es dann aus und lassen Sie es im Hintergrund fortfahren:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
Wenn Sie ein Programm ohne &
starten , es ist im Vordergrund. Es kann jeweils nur ein Prozess im Vordergrund in einem bestimmten Terminal vorhanden sein. (Oder allgemeiner eine einzelne Prozessgruppe, wenn der Vordergrundprozess einige Unterprozesse startet.) Die in bg
und fg
erstellten Shell ändern welchen Prozess im Vordergrund. Wenn sich ein Prozess im Hintergrund befindet und versucht, in das Terminal zu lesen oder zu schreiben, wird er durch ein SIGTTIN- oder SIGTTOUT-Signal gestoppt.
Ich finde Ihre Intuition, dass Apache kein Hintergrundprozess ist, weil es mit dem Benutzer über HTTP interagiert, seltsam. Apache interagiert nicht mit dem Benutzer: Es interagiert mit einem Remote-Webbrowser (der mit dem Benutzer interagiert) oder einem automatisierten Client (der nicht mit dem Benutzer interagiert). Wenn Sie einen Prozess, der mit einem interaktiven Prozess interagiert, als interaktiven Prozess betrachten, ist jeder Prozess interaktiv, was ihn zu einem nutzlosen Konzept macht.
Die von Ihnen zitierte Definition verbindet Hintergrundprozesse mit inaktiven Prozessen. Es gibt keinen Grund, warum ein Hintergrundprozess mehr schläft oder ausgetauscht wird als ein Vordergrundprozess. Ein Hintergrundprozess kann zum Beispiel einige schwere Berechnungen durchführen. Wenn sich der Benutzer hingegen von der Konsole entfernt und andere aktive Prozesse vorhanden sind, werden Vordergrundprozesse möglicherweise ausgelagert.