Tässä on yleinen määritelmä taustaprosessista:
”Tausta-prosessi on ohjelma, joka toimii ilman käyttäjän syöttöä. A useita taustaprosesseja voi olla käynnissä moniajo-käyttöjärjestelmässä, kuten Linuxissa, kun käyttäjä on vuorovaikutuksessa etualan prosessin kanssa. Jotkin taustaprosessit, kuten esimerkiksi demonit, eivät koskaan vaadi käyttäjän syöttöä, toiset ovat vain väliaikaisesti taustalla Käyttäjä on kiireinen tällä hetkellä etualalla käynnissä olevalla ohjelmalla. Joten muu prosessi voi nukkua ja vie tilaa, kunnes se aktivoidaan, mikä tekee siitä tällä hetkellä taustaprosessin. ”
Tämän määritelmän vuoksi eikö tämä tekisi apache2: n kaltaisesta prosessista taustaprosessia, koska se ei koskaan ole vuorovaikutuksessa päätelaitteen käyttäjän syötteen kanssa? Ja eikö niin, että otetaan huomioon suurin osa prosessin taustaprosesseista, koska useimmat järjestelmässä käynnissä olevat prosessit eivät käsittele käyttäjän syötteitä päätelaitteessa? Kummallista kyllä, minä henkilökohtaisesti ei pidä apache2: ta taustaprosessina, koska käyttäjä on vuorovaikutuksessa sen kanssa http-pyyntöjen kautta (vain ei päätelaitteen kautta).
Kommentit
- Luulen, että tässä on kaksi määritelmää. Yksi koskee käyttäjän syötettä (voiko prosessi hyväksyä käyttäjän syötteen, kuten päätelaite). Toinen on, nukahtuuko prosessi vai istuuko vaihtoalueella vai ei. Täällä voit viittaavat molempiin taustaprosesseihin, mikä tekee termistä hämmentävän
vastaus
Etuosa-prosessi ei edellyttää käyttäjän vuorovaikutusta. Voit tehdä
cp very_large_file destination
ja tämä estäisi päätelaitteen, kunnes kopiointi on valmis, ja sitä pidetään etualalla ilman käyttäjän vuorovaikutusta. tässä onko prosessi estänyt muiden prosessien suorittamisen, kunnes se päättyy.
Kaksi tapaa voit tehdä etualan prosessi taustakuvaan:
1- Lisäät ampersandi ( & ) komentorivin loppuun:
cp very_large_file destination &
2- Etualan prosessin pysäyttäminen ja tuominen sitten taustalle:
cp very_large_file destination
CTRL + Z
bg
Nyt apache2
lasketaan varmasti taustaprosessi: kyllä, voit olla vuorovaikutuksessa sen kanssa http-pyyntöjen kautta, mutta se vain kuuntelee porttia 80 (oletusarvoisesti) odottaessaan tällaista pyyntöä: se ei estä järjestelmää, ennen kuin käyttäjä tekee pyynnön.
Ja miksi ajattelet, että useimmat prosessit katsotaan taustaprosesseiksi? Tämä on todellakin normaalia ”monikäyttöisessä käyttöjärjestelmässä”.
Kommentit
- uteliaisuudesta, jos minulla on ohjelma, joka estää, mutta se toimii GNU-näyttöistunnossa tai tmux, ja sitten jätän tuon näytön / tmux-istunnon ja palautan ohjauksen päätelaitteelle (mutta tietysti he jättävät huomiotta HUP (hangup) -signaalin, joten ne ovat edelleen käynnissä), pitäisikö niitä pitää taustana prosessi? Luulen, että väität, että ne ovat etualan prosesseja, koska istunnossaan ne estävät, vaikka eivät estä pääterminaalissa.
- @JohnMerlino sanoisin, että
screen
/tmux
on tässä tapauksessa etualalla ja kun " palautat ohjauksen päätelaitteeseen " lähetät sen taustalle.
Vastaus
Kaksi määritelmää on ”Taustaprosessi”, yksi yleisesti ja yksi tarkka ja erityinen unixille.
Laajassa mielessä voit kutsua ”taustaprosessiksi” mitä tahansa prosessia, joka ei ole vuorovaikutuksessa konsoli. Tässä mielessä Apache on taustaprosessi.
Unix-terminologiassa ”taustaprosessilla” on tarkka määritelmä. taustaprosessi on prosessi, joka aloitetaan päätelaitteelta, mutta jota tällä hetkellä estetään vuorovaikutuksesta ter: n kanssa mineraali. (Yksinkertaistan ottamatta huomioon prosessiryhmiä.) Tyypillisesti taustaprosessi saadaan aloittamalla taustatyö kuoressa:
$ myprogram & [1] 12345 $
tai aloittamalla ohjelman, keskeytä se ja anna sen jatkaa taustalla:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
Jos käynnistät ohjelman ilman &
, se on etualalla. Etualalla voi olla vain yksi prosessi tietyssä päätelaitteessa kerrallaan. (Tai yleisemmin, yksittäinen prosessiryhmä, jos etualan prosessi käynnistää joitain aliprosesseja.) Kuoren sisäiset rakennukset bg
ja fg
muuttavat prosessia on etualalla. Kun prosessi on taustalla, jos se yrittää lukea tai kirjoittaa päätelaitteelle, se pysäytetään SIGTTIN- tai SIGTTOUT-signaalilla .
Minusta tuntuu oudolta, että Apache ei ole taustaprosessi, koska se on vuorovaikutuksessa käyttäjän kanssa HTTP: n kautta. Apache ei ole vuorovaikutuksessa käyttäjän kanssa: se on vuorovaikutuksessa etäselaimen (joka on vuorovaikutuksessa käyttäjän kanssa) tai automaattisen asiakkaan (joka ei ole vuorovaikutuksessa käyttäjän kanssa) kanssa. Jos pidät mitä tahansa prosessia, joka on vuorovaikutuksessa interaktiivisen kanssa, interaktiivisena prosessina, mikä tahansa prosessi on vuorovaikutteinen, mikä tekee siitä hyödytön käsitteen.
Mainitsemasi määritelmä yhdistää taustaprosessit tyhjäkäynnillä oleviin prosesseihin. ei ole mitään syytä, miksi taustaprosessi nukahtaa tai vaihtuu enemmän kuin etualalla. Tausta-prosessi saattaa tehdä esimerkiksi raskasta laskentaa. Päinvastoin, jos käyttäjä poistuu konsolista ja muita aktiivisia prosesseja, etualan prosessit voivat vaihdella.