Cum funcționează daemonii, procesul inițial și modul în care copiii sunt urmași

Cum funcționează daemonii, procesul inițial și modul în care copiii sunt urmași

Dacă ați lucrat vreodată cu sistemele Unix, ați auzit probabil termenul "demon". În acest articol, vreau să vă explic ce fel de demoni și cum funcționează, mai ales că numele lor face să creadă că este ceva rău.

În general, un daemon este un proces de fundal care nu este legat de terminalul în care a fost pornit. Dar cum sunt create, cum sunt legate de alte procese, cum funcționează acestea? Vom vorbi despre acest lucru, dar mai întâi să vedem cum funcționează procesul init și cum se nasc noi procese.

Cum funcționează procesul Init

În primul rând, să vorbim despre procesul inițial. cunoscută și sub denumirea de PID 1 (deoarece ID-ul său este întotdeauna 1). Acest proces este creat imediat când sistemul este pornit, adică toate celelalte procese sunt descendenții săi.

Cum funcționează procesele de ramificare

Singura modalitate de a crea un nou proces în Unix este să copiați unul existent. Această metodă, cunoscută sub numele de furcă sau forking, implică crearea unei copii a procesului ca fiu și executarea apelului de sistem exec pentru a începe un nou program. Am folosit cuvântul "forking", deoarece furculita este o metodă reală C în biblioteca Unix standard, care creează noi procese în acest fel. Procesul care solicită comanda fork este considerat părintele creat. Procesul copilului este aproape identic cu procesul părinte: numai ID-ul, ID-ul părinților și alte lucruri diferă.

În distribuțiile moderne Unix și Linux, puteți crea procese în alte moduri (de exemplu, folosind posix_spawn), dar majoritatea proceselor sunt create în acest fel.

Acum, că ați învățat despre semnificația tradițională a termenului "furculiță", devine clar de ce același concept este folosit pe GitHub. Dar mă descurc - înapoi la demonii noștri!

Cum funcționează Demonii

Schema demonului Maxwell

Înainte de a intra în lucrarea demonilor, să aflăm de unde provine acest nume. Termenul "daemon" a provenit din proiectul MAC. care la rândul său a primit numele de la demonul Maxwell - o creatură fictivă dintr-un experiment mental care sortează lent moleculele. Cuvântul demon provine de la demonul grec. care este o ființă supranaturală care lucrează în mod constant în fundal și nu este bună sau rea (spre deosebire de sensul modern obișnuit). Adică, termenul "demon" (în sensul procesului Unix) a venit de fapt dintr-o ființă supranaturală fictivă.

Demonii sunt procese de fundal care rulează separat de terminal și sunt aproape întotdeauna create de procesul init; de obicei, fac lucruri precum interogări de rețea, lucrări hardware și alte sarcini "așteptați și vedeți".

Demonii apar în două moduri. Ele pot fi create prin procesul init sau se produc în următoarea situație: procesul își creează propriul descendent și se încheie imediat. Primul caz este clar, dar ce se întâmplă în cel de-al doilea: cum procesul inițial devine părinte pentru acești demoni?

Când creați un proces de copil și apoi „ucide“ părinții lui, copilul devine proces orfan (a nu se confunda cu procesul de zombie. De exemplu, un descendent al lui, care a fost finalizat, dar este încă în așteptare atunci când părintele va citi de ieșire de stare) . În mod implicit, dacă procesul devine orfan, atunci init devine părintele său "primitor". Asta e tot ceea ce face demonii unici!

concluzie

În general, demonii sunt un concept foarte simplu de înțeles, dar pentru a le înțelege pe deplin, trebuie să aflăm ce înseamnă procesul inițial și modul în care procesele sunt ramificate.