Itt található a háttérfolyamat általános meghatározása:
“A háttérfolyamat olyan program, amely felhasználói bevitel nélkül fut. számos háttérfolyamat futtatható egy többfeladatos operációs rendszeren, például a Linuxon, miközben a felhasználó interakcióba lép az előtér folyamatával. Egyes háttérfolyamatok, például a démonok, soha nem igényelnek felhasználói bevitelt. Mások csupán ideiglenesen a háttérben vannak, míg a felhasználó a jelenleg az előtérben futó programmal van elfoglalva. Annak érdekében, hogy egy másik folyamat aludhasson, és felcserélhesse a helyet, amíg aktiválódik, ezáltal jelenleg háttérfolyamatsá válik. “
Tekintettel erre a definícióra, nem tennék háttérfolyamatsá olyan folyamatot, mint az apache2, mivel soha nem lép kölcsönhatásba a terminál felhasználói bemenetével? És nem vennék figyelembe a legtöbb folyamat háttér folyamatát, mivel a rendszeren futó legtöbb folyamat nem foglalkozik a terminál felhasználói bemenetével? Furcsa módon én személy szerint nem tartanám az apache2-et háttérfolyamatnak, mivel a felhasználó http-kéréseken keresztül kommunikál vele (csak nem terminálon keresztül).
Megjegyzések
- Úgy gondolom, hogy itt két definíció létezik. Az egyik a felhasználói bevitelről szól (arról, hogy egy folyamat képes-e elfogadni a felhasználói bevitelt, például a terminál). A másik az, hogy alszik-e egy folyamat és ül-e a cserehelyen vagy sem. Itt megteheti mindkettőre háttérfolyamatként hivatkozhat, ami zavaróvá teszi a kifejezést
Válasz
Egy előtérbeli folyamat nem szükségessé teszi a felhasználói beavatkozást. Megteheti
cp very_large_file destination
, és ez blokkolja a terminálját, amíg a másolás elkészül, és előtérbeli folyamatnak számít, felhasználói beavatkozás nélkül. itt az, hogy a folyamat blokkolja-e a többi folyamat végrehajtását, amíg le nem áll.
Kétféle módon előtér folyamatot készíteni háttérbe:
1- Ampersand ( & ) hozzáadása a parancssor végén:
cp very_large_file destination &
2- Az előtér folyamatának leállítása, majd háttérbe kerülése:
cp very_large_file destination
CTRL + Z
bg
Most apache2
mindenképpen háttérfolyamat: igen, kapcsolatba léphet vele http kéréseken keresztül, de egyszerűen csak hallgatja a 80-as portot (alapértelmezés szerint), várva egy ilyen kérésre: nem blokkolja a rendszert, amíg a felhasználó nem kér.
És miért vitatja a legtöbb folyamatot, amelyet háttérfolyamatnak tekintenek? Ez valóban normális egy “többfeladatos operációs rendszerben”.
Megjegyzések
- Kíváncsiságból, ha van olyan programom, amely blokkol, de egy GNU képernyő-munkamenetben vagy tmux-ban fut, majd hagyom azt a képernyőt / tmux-munkamenetet, és visszaadom a vezérlést a terminálnak (de természetesen figyelmen kívül hagyják a HUP (hangup) jelet, így továbbra is futnak) folyamat? Gondolom, azt állítanád, hogy előtérbeli folyamatok, mivel a munkamenetük során blokkolnak, bár nem blokkolják a fő terminált.
- @JohnMerlino azt mondanám, hogy
screen
/tmux
az előtér folyamat ebben az esetben, és amikor " visszatér a vezérléshez egy terminálhoz " elküldöd a háttérbe.
Válasz
A „Háttérfolyamat”, egy általános értelemben, egy pontos és egyedi az unix-hez.
Tág értelemben „háttérfolyamatnak” nevezhetünk minden olyan folyamatot, amely nem lép kölcsönhatásba a konzol. Ebben az értelemben az Apache háttérfolyamat.
Az unix terminológiában a „háttérfolyamat” pontos definícióval rendelkezik. A háttérfolyamat olyan folyamat, amelyet egy terminálról indítanak, de jelenleg nem engedélyezett a terrel való interakció ásvány. (Leegyszerűsítem, ha nem veszem figyelembe a folyamatcsoportokat.) A háttérfolyamatot általában úgy kapja meg, hogy háttérhivatalt indít egy héjban:
$ myprogram & [1] 12345 $
vagy egy programot, majd függessze fel és hagyja a háttérben folytatódni:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
Ha &
nélkül indít programot , az előtérben van. Csak egy folyamat lehet az előtérben egy adott terminálban egyszerre. (Vagy általánosabban, egyetlen folyamatcsoport, ha az előtérbeli folyamat elindít néhány alfolyamatot.) A bg
és a fg
beépített shell megváltoztatja a folyamatot az előtérben van. Ha egy folyamat a háttérben van, és megpróbál olvasni vagy írni a terminálra, akkor azt egy SIGTTIN vagy SIGTTOUT jel állítja le .
Különösnek találom azt a megérzését, miszerint az Apache nem háttérfolyamat, mert a felhasználóval a HTTP-n keresztül kommunikál. Az Apache nem lép kapcsolatba a felhasználóval: hanem egy távoli webböngészővel (amely a felhasználóval van interakcióban) vagy egy automatizált klienssel (amely nem a felhasználóval). Ha olyan folyamatot tekint interaktív folyamatnak, amely interakcióval lép kölcsönhatásba, akkor bármely folyamat interaktív, ami haszontalan fogalommá teszi.
Az Ön által idézett definíció a háttérfolyamatokat összemossa a tétlen folyamatokkal. s nincs oka annak, hogy egy háttérfolyamat alszik vagy kicserélődne többet, mint egy előtér folyamat. Egy háttérfolyamat például nehéz számításokat végezhet. Ezzel szemben, ha a felhasználó eltávolodik a konzoltól, és vannak más aktív folyamatok, az előtér folyamatai felcserélődhetnek.