mi a háttérfolyamat?

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük