Her er en vanlig definisjon av en bakgrunnsprosess:
«En bakgrunnsprosess er et program som kjører uten brukerinngang. A antall bakgrunnsprosesser kan kjøres på et multitasking-operativsystem, for eksempel Linux, mens brukeren samhandler med forgrunnsprosessen Noen bakgrunnsprosesser, for eksempel demoner, krever aldri brukerinndata. Andre er bare i bakgrunnen midlertidig mens brukeren er opptatt med programmet som for tiden kjører i forgrunnen. Slik at annen prosess kan være å sove og ta opp bytteplass, til den er aktivert, noe som gjør det for øyeblikket til en bakgrunnsprosess. «
Gitt den definisjonen, ville det ikke gjøre en prosess som apache2 til en bakgrunnsprosess siden den aldri samhandler med brukerinngang i terminalen? Og ville ikke det som vurderer de fleste prosessbakgrunnsprosesser, siden de fleste prosesser som kjører på et system ikke håndterer brukerinngang i terminalen? Merkelig nok vil jeg personlig ikke betrakte apache2 som en bakgrunnsprosess, siden en bruker kommuniserer med det gjennom http-forespørsler (bare ikke en terminal).
Kommentarer
- Jeg tror det er to definisjoner her. Den ene handler om brukerinngang (om en prosess kan akseptere brukerinngang, for eksempel terminalen). Den andre er om en prosess sover og sitter på bytteplass eller ikke. Her kan du refererer til begge disse som bakgrunnsprosesser, noe som gjør begrepet forvirrende
Svar
En forgrunnsprosess gjør ikke nødvendiggjøre brukerinteraksjon. Du kan gjøre
cp very_large_file destination
, og dette vil blokkere terminalen din til kopien er ferdig og vil bli ansett som en forgrunnsprosess uten brukerinteraksjon. her er om prosessen blokkerer utførelsen av andre prosesser til den avsluttes.
To måter du kan lage en forgrunnsprosess i bakgrunnen:
1- Legge til et ampersand ( & ) på slutten av kommandolinjen:
cp very_large_file destination &
2- Stoppe en forgrunnsprosess og deretter bringe den i bakgrunnen:
cp very_large_file destination
CTRL + Z
bg
Nå vil apache2
definitivt telle som en bakgrunnsprosess: ja, du kan samhandle med den via http-forespørsler, men den lytter ganske enkelt på port 80 (som standard) og venter på en slik forespørsel: den blokkerer ikke systemet før brukeren kommer med en forespørsel.
Og hvorfor tar du problemer når de fleste prosesser blir betraktet som bakgrunnsprosesser? Dette er faktisk normalt i et «multi-tasking operativsystem».
Kommentarer
- Av nysgjerrighet, hvis jeg har et program som blokkerer, men den kjører i en GNU-skjermøkt eller tmux, og så forlater jeg den skjermen / tmux-økten og returnerer kontrollen til terminalen (men selvfølgelig ignorerer de HUP (hangup) -signalet slik at de fortsatt kjører), ville de blitt betraktet som en bakgrunn prosess? Jeg antar at du vil hevde at de er forgrunnsprosesser siden de i løpet av økten deres blokkerer, selv om de ikke blokkerer i hovedterminalen.
- @JohnMerlino Jeg vil si at
screen
/tmux
er forgrunnen i dette tilfellet, og når du " returnerer kontrollen til en terminal " du sender det i bakgrunnen.
Svar
Det er to vanlige definisjoner av «Bakgrunnsprosess», en i generelle termer og en presis og spesifikk for unix.
I vid forstand kan du kalle «bakgrunnsprosess» enhver prosess som ikke samhandler med brukeren som sitter ved I denne forstand er Apache en bakgrunnsprosess.
I unix-terminologi har «bakgrunnsprosess» en presis definisjon. En bakgrunnsprosess er en prosess som startes fra en terminal, men som for øyeblikket er utestengt fra å samhandle med ter minal. (Jeg forenkler ved å ikke vurdere prosessgrupper.) Du får vanligvis en bakgrunnsprosess ved å starte en bakgrunnsjobb i et skall:
$ myprogram & [1] 12345 $
eller ved å starte en programmet, og deretter suspendere det og la det fortsette i bakgrunnen:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
Hvis du starter et program uten &
, det er i forgrunnen. Det kan bare være en enkelt prosess i forgrunnen i en gitt terminal om gangen. (Eller mer generelt, en enkelt prosessgruppe, hvis forgrunnsprosessen starter noen underprosesser.) Skallet innebygde bg
og fg
endrer hvilken prosess er i forgrunnen. Når en prosess er i bakgrunnen, hvis den prøver å lese eller skrive til terminalen, blir den stoppet av et SIGTTIN- eller SIGTTOUT-signal .
Jeg synes intuisjonen din om at Apache ikke er en bakgrunnsprosess fordi den samhandler med brukeren via HTTP, er merkelig. Apache samhandler ikke med brukeren: den interagerer med en ekstern nettleser (som kommuniserer med brukeren) eller en automatisert klient (som ikke kommuniserer med brukeren). Hvis du ser på en prosess som samhandler med en interaktiv som en interaktiv prosess, er enhver prosess interaktiv, noe som gjør den til et ubrukelig konsept.
Definisjonen du siterer, samler bakgrunnsprosesser med inaktive prosesser. Der » Det er ingen grunn til at en bakgrunnsprosess ville ligge i dvale eller byttet ut mer enn en forgrunnsprosess. En bakgrunnsprosess kan for eksempel gjøre noen tunge beregninger. Omvendt, hvis brukeren går bort fra konsollen, og det er andre aktive prosesser, kan forgrunnsprosesser byttes ut.