co je proces na pozadí?

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

  • Ze zvědavosti, pokud mám program, který blokuje, ale běží v relaci obrazovky GNU nebo tmux, a pak tuto relaci obrazovky / tmux nechám a vrátím ovládání terminálu (ale samozřejmě ignorují signál HUP (hangup), takže stále běží), budou považováni za pozadí proces? Myslím, že byste tvrdili, že jde o procesy v popředí, protože v rámci své relace blokují, i když neblokují v hlavním terminálu.
  • @JohnMerlino Řekl bych, že screen / tmux je v tomto případě proces v popředí a když " vrátíte řízení terminálu " odešlete jej na pozadí.

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *