ce este un proces de fundal?

Iată o definiție comună a unui proces de fundal:

„Un proces de fundal este un program care rulează fără intrarea utilizatorului. A numărul de procese de fundal poate fi rulat pe un sistem de operare multitasking, cum ar fi Linux, în timp ce utilizatorul interacționează cu procesul de prim plan Unele procese de fundal, cum ar fi demonii, de exemplu, nu necesită niciodată intrarea utilizatorului. Altele sunt doar în fundal temporar în timp ce utilizatorul este ocupat cu programul care rulează în prezent în prim-plan. Astfel, un alt proces poate fi dormit și ocuparea spațiului swap, până când este activat, ceea ce îl face în prezent un proces de fundal. „

Având în vedere această definiție, Nu ar face ca un proces ca apache2 să devină un proces de fundal, deoarece nu interacționează niciodată cu intrarea utilizatorului în terminal? Și nu ar lua în considerare majoritatea proceselor de fond de proces, deoarece majoritatea proceselor care rulează pe un sistem nu se ocupă de intrarea utilizatorului în terminal? În mod ciudat, personal nu aș considera apache2 un proces de fundal, deoarece un utilizator interacționează cu acesta prin solicitări http (nu doar un terminal).

Comentarii

  • Cred că există două definiții aici. Una se referă la introducerea utilizatorului (dacă un proces poate accepta introducerea utilizatorului, cum ar fi terminalul). Cealaltă este dacă un proces este în repaus și așezat pe spațiul swap sau nu. Aici puteți faceți referire la ambele ca procese de fundal, ceea ce face ca termenul să fie confuz

Răspuns

Un proces de prim plan nu necesită interacțiunea cu utilizatorul. Puteți face

cp very_large_file destination 

și acest lucru vă va bloca terminalul până la finalizarea copiei și ar fi considerat un proces de prim-plan fără interacțiune cu utilizatorul. aici fiind dacă procesul blochează executarea altor procese până la terminarea acestuia.

Două moduri în care puteți faceți un proces de prim-plan într-unul de fundal:

1- Adăugarea unui semn comercial ( & ) la sfârșitul liniei de comandă:

cp very_large_file destination & 

2- Oprirea unui proces de prim-plan apoi aducerea acestuia în fundal:

cp very_large_file destination 

CTRL + Z

bg 

Acum apache2 ar conta cu siguranță ca un proces de fundal: da, puteți interacționa cu acesta prin solicitări http, dar pur și simplu ascultă pe portul 80 (implicit) în așteptarea unei astfel de cereri: nu blochează sistemul până când utilizatorul nu face o cerere.

Și de ce vă puneți problema la majoritatea proceselor fiind considerate procese de fundal? Acest lucru este într-adevăr normal într-un „sistem de operare multi-tasking”.

Comentarii

  • Din curiozitate, dacă am un program care blochează, dar rulează într-o sesiune de ecran GNU sau tmux și apoi părăsesc acea sesiune de ecran / tmux și returnez controlul la terminal (dar, desigur, ignoră semnalul HUP (închidere), așa că sunt încă în funcțiune), ar fi considerate un fundal proces? Cred că ați argumenta că sunt procese din prim-plan, deoarece în cadrul sesiunii lor, acestea se blochează, chiar dacă nu sunt blocate în terminalul principal.
  • @JohnMerlino Aș spune că screen / tmux este procesul de prim-plan în acest caz și când " reveniți la un terminal " îl trimiteți în fundal.

Răspundeți

Există două definiții comune ale „Proces de fundal”, unul în termeni generali și unul precis și specific unix.

În sens larg, puteți numi „proces de fundal” oricărui proces care nu interacționează cu utilizatorul care stă la console. În acest sens, Apache este un proces de fundal.

În terminologia unix, „proces de fundal” are o definiție precisă. Un proces de fundal este un proces care este pornit de la un terminal, dar în prezent este interzis să interacționeze cu ter minal. (Mă simplific fără a lua în considerare grupurile de procese.) Obțineți de obicei un proces de fundal pornind o lucrare de fundal într-un shell:

$ myprogram & [1] 12345 $ 

sau pornind un program, apoi suspendându-l și lăsându-l să continue în fundal:

$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $ 

Dacă porniți un program fără & , este în prim-plan. Nu poate exista decât un singur proces în prim plan într-un anumit terminal la un moment dat. (Sau, mai general, un singur grup de procese, dacă procesul din prim-plan pornește unele subprocese.) Încorporările shell bg și fg modifică procesul este în prim-plan. Când un proces se află în fundal, dacă încearcă să citească sau să scrie pe terminal, acesta este oprit de un semnal SIGTTIN sau SIGTTOUT .

Mi se pare ciudată intuiția ta că Apache nu este un proces de fundal, deoarece interacționează cu utilizatorul prin HTTP. Apache nu interacționează cu utilizatorul: interacționează cu un browser web la distanță (care interacționează cu utilizatorul) sau cu un client automat (care nu interacționează cu utilizatorul). Dacă considerați orice proces care „interacționează cu un interactiv ca un proces interactiv, atunci orice proces este interactiv, ceea ce îl face un concept inutil.

Definiția pe care o citați combină procesele de fundal cu procesele inactive. Acolo” Nu există niciun motiv pentru care un proces de fundal ar fi dormit sau schimbat mai mult decât un proces de prim-plan. Un proces de fundal poate face unele calcule grele, de exemplu. În schimb, dacă utilizatorul se îndepărtează de consolă și există alte procese active, procesele din prim plan pot fi schimbate.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *