hvad er en baggrundsproces?

Her er en almindelig definition af en baggrundsproces:

“En baggrundsproces er et program, der kører uden brugerinput. A antallet af baggrundsprocesser kan køre på et multitasking-operativsystem, såsom Linux, mens brugeren interagerer med forgrundsprocessen Nogle baggrundsprocesser, som f.eks. dæmoner, kræver aldrig brugerinput. Andre er kun i baggrunden midlertidigt, mens brugeren er optaget af det program, der i øjeblikket kører i forgrunden. Så den anden proces kan sove og tage swap-plads, indtil den er aktiveret, hvilket gør det i øjeblikket til en baggrundsproces. “

I betragtning af denne definition, ville det ikke gøre en proces som apache2 til en baggrundsproces, da den aldrig interagerer med brugerinput i terminalen? Og ville det ikke betragte de fleste procesbaggrundsprocesser, da de fleste processer, der kører på et system, ikke beskæftiger sig med brugerinput i terminalen? Mærkeligt nok vil jeg personligt ikke betragte apache2 som en baggrundsproces, da en bruger interagerer med det via http-anmodninger (bare ikke en terminal).

Kommentarer

  • Jeg tror, der er to definitioner her. Den ene handler om brugerinput (om en proces kan acceptere brugerinput, f.eks. terminalen). Den anden er, om en proces sover og sidder på swap-plads eller ej. Her kan du henviser til begge disse som baggrundsprocesser, hvilket gør udtrykket forvirrende

Svar

En forgrundsproces gør ikke nødvendiggør brugerinteraktion. Du kan gøre

cp very_large_file destination 

og dette vil blokere din terminal, indtil kopien er færdig og vil blive betragtet som en forgrundsproces uden brugerinteraktion. her er om processen blokerer udførelsen af andre processer, indtil den afsluttes.

To måder du kan lav en forgrundsproces i en baggrund:

1- Tilføjelse af et ampersand ( & ) i slutningen af din kommandolinje:

cp very_large_file destination & 

2- Stoppe en forgrundsproces og derefter bringe den i baggrunden:

cp very_large_file destination 

CTRL + Z

bg 

Nu apache2 vil helt sikkert tælle som en baggrundsproces: ja, du kan interagere med det via http-anmodninger, men det lytter simpelthen på port 80 (som standard) og venter på en sådan anmodning: det blokerer ikke systemet, før brugeren fremsætter en anmodning.

Og hvorfor tager du spørgsmål ved de fleste processer, der betragtes som baggrundsprocesser? Dette er faktisk normalt i et “multi-tasking-operativsystem”.

Kommentarer

  • Af nysgerrighed, hvis jeg har et program, der blokerer, men det kører i en GNU-skærmsession eller tmux, og så forlader jeg den skærm / tmux-session og returnerer kontrol til terminal (men selvfølgelig ignorerer de HUP (hangup) -signalet, så de stadig kører), ville de blive betragtet som en baggrund behandle? Jeg antager, at du vil argumentere for, at de er forgrundsprocesser, da de inden for deres session blokerer, selvom de ikke blokerer i hovedterminalen.
  • @JohnMerlino Jeg vil sige, at screen / tmux er forgrundsprocessen i dette tilfælde, og når du " returnerer kontrol til en terminal " du sender det i baggrunden.

Svar

Der er to almindelige definitioner af “Baggrundsproces”, en i generelle termer og en præcis og specifik for unix.

I bred forstand kan du kalde “baggrundsproces” enhver proces, der ikke interagerer med brugeren, der sidder ved I denne forstand er Apache en baggrundsproces.

I unix-terminologi har “baggrundsproces” en præcis definition. En baggrundsproces er en proces, der startes fra en terminal, men som i øjeblikket er udelukket fra at interagere med ter minal. (Jeg forenkler ved ikke at overveje procesgrupper.) Du får typisk en baggrundsproces ved at starte et baggrundsjob i en shell:

$ myprogram & [1] 12345 $ 

eller ved at starte en program, derefter suspendere det og lade det fortsætte i baggrunden:

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

Hvis du starter et program uden & , det er i forgrunden. Der kan kun være en enkelt proces i forgrunden i en given terminal ad gangen. (Eller mere generelt en enkelt procesgruppe, hvis forgrundsprocessen starter nogle underprocesser.) Skalindbyggede bg og fg skifter hvilken proces er i forgrunden. Når en proces er i baggrunden, hvis den forsøger at læse eller skrive til terminalen, stoppes den af et SIGTTIN- eller SIGTTOUT-signal .

Jeg finder din intuition, at Apache ikke er en baggrundsproces, fordi den interagerer med brugeren via HTTP, mærkelig. Apache interagerer ikke med brugeren: den interagerer med en fjernwebbrowser (som interagerer med brugeren) eller en automatiseret klient (som ikke interagerer med brugeren). Hvis du betragter en proces, der interagerer med en interaktiv som en interaktiv proces, så er enhver proces interaktiv, hvilket gør det til et ubrugeligt koncept.

Den definition, du citerer, samler baggrundsprocesser med ledige processer. Der ” s ingen grund til, at en baggrundsproces ville sove eller bytte ud mere end en forgrundsproces. En baggrundsproces kan f.eks. Udføre tunge beregninger. Omvendt, hvis brugeren træder væk fra konsollen, og der er andre aktive processer, kan forgrundsprocesser måske byttes ud.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *