wat is een achtergrondproces?

Hier is een algemene definitie van een achtergrondproces:

“Een achtergrondproces is een programma dat draait zonder gebruikersinvoer. A aantal achtergrondprocessen kan worden uitgevoerd op een multitasking-besturingssysteem, zoals Linux, terwijl de gebruiker interactie heeft met het voorgrondproces. Sommige achtergrondprocessen, zoals daemons, vereisen bijvoorbeeld nooit gebruikersinvoer. Anderen bevinden zich slechts tijdelijk op de achtergrond terwijl de gebruiker is bezig met het programma dat momenteel op de voorgrond wordt uitgevoerd. Zodat dat andere proces kan slapen en swapruimte kan innemen, totdat het wordt geactiveerd, waardoor het momenteel een achtergrondproces wordt. “

Gegeven die definitie, Zou dat niet van een proces als apache2 een achtergrondproces maken, aangezien het nooit interactie heeft met gebruikersinvoer in de terminal? En zou dat niet de meeste procesachtergrondprocessen in overweging nemen, aangezien de meeste processen die op een systeem draaien niet te maken hebben met gebruikersinvoer in de terminal? Vreemd genoeg zou ik persoonlijk apache2 niet als een achtergrondproces beschouwen, aangezien een gebruiker er wel interactie mee heeft via http-verzoeken (alleen geen terminal).

Opmerkingen

  • Ik denk dat er hier twee definities zijn. De ene gaat over gebruikersinvoer (of een proces gebruikersinvoer kan accepteren, zoals de terminal). De andere is of een proces slaapt en op swapspace zit of niet. Hier kun je verwijzen naar beide als achtergrondprocessen, wat de term verwarrend maakt.

Antwoord

Een voorgrondproces is niet gebruikersinteractie vereisen. U kunt

cp very_large_file destination 

doen en dit zou uw terminal blokkeren totdat het kopiëren is voltooid en zou worden beschouwd als een voorgrondproces zonder gebruikersinteractie. hier is of het proces de uitvoering van andere processen blokkeert totdat het wordt beëindigd.

Twee manieren waarop u kunt maak een voorgrondproces in een achtergrond:

1- Een ampersand ( & ) toevoegen aan het einde van uw opdrachtregel:

cp very_large_file destination & 

2- Een voorgrondproces stoppen en vervolgens naar de achtergrond brengen:

cp very_large_file destination 

CTRL + Z

bg 

Nu zou apache2 zeker tellen als een achtergrondproces: ja, je kunt ermee communiceren via http-verzoeken, maar het luistert gewoon op poort 80 (standaard) wachtend op een dergelijk verzoek: het blokkeert het systeem niet totdat de gebruiker een verzoek doet.

En waarom bekritiseert u het bij de meeste processen die als achtergrondprocessen worden beschouwd? Dit is inderdaad normaal in een “multi-tasking besturingssysteem”.

Opmerkingen

  • Uit nieuwsgierigheid, als ik een programma heb dat wel blokkeert maar het draait in een GNU-schermsessie of tmux, en dan verlaat ik die scherm / tmux-sessie en geef ik de controle terug naar de terminal (maar natuurlijk negeren ze het HUP-signaal (ophangen) zodat ze nog steeds actief zijn), zouden ze als een achtergrond worden beschouwd werkwijze? Ik denk dat je zou zeggen dat het processen op de voorgrond zijn, omdat ze binnen hun sessie blokkeren, ook al blokkeren ze niet in de hoofdterminal.
  • @JohnMerlino Ik zou zeggen dat screen / tmux is het voorgrondproces in dit geval en wanneer u " de controle teruggeeft aan een terminal " je stuurt het naar de achtergrond.

Antwoord

Er zijn twee algemene definities van “Achtergrondproces”, een in algemene termen, en een nauwkeurig en specifiek voor unix.

In brede zin kunt u “achtergrondproces” elk proces noemen dat geen interactie heeft met de gebruiker die aan de console. In die zin is Apache een achtergrondproces.

In Unix-terminologie heeft “achtergrondproces” een precieze definitie. Een achtergrondproces is een proces dat wordt gestart vanaf een terminal, maar momenteel is uitgesloten van interactie met de ter Minal. (Ik vereenvoudig door geen rekening te houden met procesgroepen.) Meestal krijg je een achtergrondproces door een achtergrondtaak in een shell te starten:

$ myprogram & [1] 12345 $ 

of door een programma, het vervolgens opschorten en op de achtergrond laten doorgaan:

$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $ 

Als u een programma start zonder & , het staat op de voorgrond. Er kan slechts één proces op de voorgrond in een bepaalde terminal tegelijk zijn. (Of meer in het algemeen, een enkele procesgroep, als het voorgrondproces enkele subprocessen start.) De ingebouwde shell bg en fg veranderen welk proces staat op de voorgrond. Als een proces zich op de achtergrond bevindt en het probeert te lezen of te schrijven naar de terminal, wordt het gestopt door een SIGTTIN- of SIGTTOUT-signaal .

Ik vind je intuïtie dat Apache geen achtergrondproces is omdat het interactie heeft met de gebruiker via HTTP, vreemd. Apache heeft geen interactie met de gebruiker: het heeft interactie met een webbrowser op afstand (die interactie heeft met de gebruiker) of een geautomatiseerde client (die geen interactie heeft met de gebruiker). Als je een proces dat interageert met een interactief proces beschouwt als een interactief proces, dan is elk proces interactief, wat het een nutteloos concept maakt.

De definitie die je aanhaalt, brengt achtergrondprocessen samen met inactieve processen. Het is geen reden waarom een achtergrondproces zou slapen of meer zou worden verwisseld dan een voorgrondproces. Een achtergrondproces kan bijvoorbeeld zware berekeningen uitvoeren. Omgekeerd, als de gebruiker de console verlaat en er andere actieve processen zijn, kunnen voorgrondprocessen worden verwisseld.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *