Zde je běžná definice procesu na pozadí:
„Proces na pozadí je program, který běží bez vstupu uživatele. A na operačním systému s více úkoly, jako je Linux, může běžet několik procesů na pozadí, zatímco uživatel interaguje s procesem v popředí Některé procesy na pozadí, například démoni, například nikdy nevyžadují vstup uživatele. Ostatní jsou pouze dočasně na pozadí, zatímco uživatel je zaneprázdněn programem, který aktuálně běží v popředí. Takže tento jiný proces může spát a zabírat odkládací prostor, dokud nebude aktivován, což z něj v současné době dělá proces na pozadí. “
Vzhledem k této definici, nevytvořil by proces jako apache2 proces na pozadí, protože nikdy neinteraguje se vstupem uživatele v terminálu? A nebere to v úvahu většinu procesů na pozadí procesu, protože většina procesů běžících v systému se nezabývá vstupem uživatele v terminálu? Kupodivu bych osobně „nepovažoval apache2 za proces na pozadí, protože s ním uživatel komunikuje prostřednictvím požadavků http (pouze ne terminál).
Komentáře
- Myslím, že zde existují dvě definice. Jedna se týká vstupu uživatele (zda proces může přijímat vstup uživatele, například terminál). Druhá je, zda proces spí a sedí na odkládacím prostoru nebo ne. Tady můžete odkazovat na oba tyto procesy jako na pozadí, což činí tento výraz matoucí
Answer
Proces v popředí vyžadovat interakci uživatele. Můžete to udělat
cp very_large_file destination
a to by blokovalo váš terminál, dokud nebude kopie hotová, a bylo by to považováno za proces v popředí bez interakce uživatele. Bod zde je, zda proces blokuje provádění dalších procesů, dokud není ukončen.
Můžete dvěma způsoby vytvořit proces v popředí do pozadí:
1- Přidání ampersandu ( & ) na konec příkazového řádku:
cp very_large_file destination &
2- Zastavení procesu v popředí a jeho přenesení do pozadí:
cp very_large_file destination
CTRL + Z
bg
Nyní apache2
by se rozhodně počítalo jako proces na pozadí: ano, můžete s ním komunikovat prostřednictvím požadavků HTTP, ale jednoduše naslouchá na portu 80 (ve výchozím nastavení) čeká na takový požadavek: neblokuje systém, dokud uživatel nevydá požadavek.
A proč berete problém u většiny procesů považovaných za procesy na pozadí? To je v „víceúlohovém operačním systému“ skutečně normální.
Komentáře
Odpovědět
Existují dvě společné definice „Proces na pozadí“, jeden obecně a jeden přesný a specifický pro unix.
V širším slova smyslu můžete „proces na pozadí“ nazvat jakýkoli proces, který neinteraguje s uživatelem sedícím na konzole. V tomto smyslu je Apache procesem na pozadí.
V terminologii unixu má „proces na pozadí“ přesnou definici. proces na pozadí je proces, který je spuštěn z terminálu, ale v současné době je mu zakázána interakce s ter min. (Zjednoduším to tím, že neuvažuji o skupinách procesů.) Proces na pozadí obvykle získáte spuštěním úlohy na pozadí v prostředí:
$ myprogram & [1] 12345 $
nebo spuštěním pozastavte a nechejte jej pokračovat na pozadí:
$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $
Pokud spustíte program bez &
, je v popředí. V daném terminálu může být v popředí pouze jeden proces současně. (Nebo obecněji jedna skupina procesů, pokud proces v popředí spustí některé podprocesy.) Vestavěné prostředí bg
a fg
mění který proces je v popředí. Pokud je proces na pozadí, pokud se pokusí číst nebo zapisovat na terminál, je zastaven signálem SIGTTIN nebo SIGTTOUT .
Vaše intuice, že Apache není procesem na pozadí, mi připadá podivná. Apache neinteraguje s uživatelem: jedná se o interakci se vzdáleným webovým prohlížečem (který interaguje s uživatelem) nebo automatizovaným klientem (který neinteraguje s uživatelem). Pokud považujete jakýkoli proces, který „interaguje s interaktivním, za interaktivní proces, pak je jakýkoli proces interaktivní, což z něj činí zbytečný koncept.
Definice, kterou citujete, spojuje procesy na pozadí s nečinnými procesy. Není důvod, proč by proces na pozadí spal nebo vyměňoval více než proces v popředí. Například proces na pozadí může provádět náročné výpočty. Naopak, pokud uživatel odejde z konzoly a existují další aktivní procesy, mohou se procesy v popředí vyměnit.
screen
/tmux
je v tomto případě proces v popředí a když " vrátíte řízení terminálu " odešlete jej na pozadí.