.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013 by Michael Kerrisk .\" and Copyright (c) 2012 by Eric W. Biederman .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH pid_namespaces 7 "13 iunie 2024" "Pagini de manual de Linux 6.9.1" .SH NUME pid_namespaces \- vedere de ansamblu a spațiilor de nume PID Linux .SH DESCRIERE Pentru o descriere generală a spațiilor de nume, consultați \fBnamespaces\fP(7). .P Spațiile de nume PID izolează spațiul numerelor ID ale proceselor, ceea ce înseamnă că procesele din diferite spații de nume PID pot avea același PID. Spațiile de nume PID permit containerelor să ofere funcționalități precum suspendarea/reluarea setului de procese din container și migrarea containerului către o nouă gazdă, în timp ce procesele din container păstrează aceleași PID\-uri. .P PID\-urile dintr\-un nou spațiu de nume PID încep de la 1, oarecum ca într\-un sistem autonom, iar apelurile la \fBfork\fP(2), \fBvfork\fP(2) sau \fBclone\fP(2) vor produce procese cu PID\-uri unice în spațiul de nume. .P .\" .\" ============================================================ .\" Utilizarea spațiilor de nume PID necesită un nucleu care este configurat cu opțiunea \fBCONFIG_PID_NS\fP. .SS "Procesul de inițiere (init) a spațiului de nume" Primul proces creat într\-un spațiu de nume nou (de exemplu, procesul creat folosind \fBclone\fP(2) cu fanionul \fBCLONE_NEWPID\fP sau primul copil creat de un proces după un apel la \fBunshare\fP(2) folosind fanionul \fBCLONE_NEWPID\fP) are PID\-ul 1 și este procesul „init” pentru spațiul de nume (a se vedea \fBinit\fP(1)). Acest proces devine părintele oricărui proces copil rămas orfan din cauza încetării unui proces care se află în acest spațiu de nume PID (a se vedea mai jos pentru detalii suplimentare). .P Dacă procesul „init” al unui spațiu de nume PID se încheie, nucleul încheie toate procesele din spațiul de nume prin intermediul unui semnal \fBSIGKILL\fP. Acest comportament reflectă faptul că procesul „init” este esențial pentru funcționarea corectă a unui spațiu de nume PID. În acest caz, un \fBfork\fP(2) ulterior în acest spațiu de nume PID eșuează cu eroarea \fBENOMEM\fP; nu este posibilă crearea unui proces nou într\-un spațiu de nume PID al cărui proces „init” s\-a încheiat. Astfel de scenarii pot apărea atunci când, de exemplu, un proces utilizează un descriptor de fișier deschis pentru un fișier \fI/proc/\fPpid\fI/ns/pid\fP corespunzător unui proces care se afla într\-un spațiu de nume pentru a \fBsetns\fP(2) în acel spațiu de nume după ce procesul „init” s\-a încheiat. Un alt scenariu posibil poate apărea după un apel la \fBunshare\fP(2): dacă primul copil creat ulterior de un \fBfork\fP(2) se termină, atunci apelurile ulterioare la \fBfork\fP(2) eșuează cu \fBENOMEM\fP. .P Doar semnalele pentru care procesul „init” a stabilit un gestionar de semnale pot fi trimise procesului „init” de către alți membri ai spațiului de nume PID. Această restricție se aplică chiar și proceselor privilegiate și previne omorârea accidentală a procesului „init” de către alți membri ai spațiului de nume PID. .P De asemenea, un proces dintr\-un spațiu de nume antecesor poate trimite semnale către procesul „init” al unui spațiu de nume PID copil numai dacă procesul „init” a stabilit un gestionar pentru semnalul respectiv \-\- sub rezerva verificărilor obișnuite ale permisiunilor descrise în \fBkill\fP(2) \-\-; (în cadrul gestionarului, câmpul \fIsiginfo_t\fP \fIsi_pid\fP descris în \fBsigaction\fP(2) va fi zero). \fBSIGKILL\fP sau \fBSIGSTOP\fP sunt tratate în mod excepțional: aceste semnale sunt livrate forțat atunci când sunt trimise dintr\-un spațiu de nume PID antecesor. Niciunul dintre aceste semnale nu poate fi capturat de procesul „init” și, prin urmare, va duce la acțiunile obișnuite asociate acestor semnale (respectiv, terminarea și oprirea procesului). .P .\" .\" ============================================================ .\" Începând cu Linux 3.4, apelul de sistem \fBreboot\fP(2) face ca un semnal să fie trimis către procesul „init” din spațiul de nume. Consultați \fBreboot\fP(2) pentru mai multe detalii. .SS "Imbricarea spațiilor de nume PID" .\" commit f2302505775fd13ba93f034206f1e2a587017929 .\" The kernel constant MAX_PID_NS_LEVEL Spațiile de nume PID pot fi imbricate: fiecare spațiu de nume PID are un părinte, cu excepția spațiului de nume PID inițial („rădăcină”). Părintele unui spațiu de nume PID este spațiul de nume PID al procesului care a creat spațiul de nume utilizând \fBclone\fP(2) sau \fBunshare\fP(2). Spațiile de nume PID formează astfel un arbore, toate spațiile de nume urmându\-și strămoșii până la spațiul de nume rădăcină. Începând cu Linux 3.7, nucleul limitează la 32 adâncimea maximă de imbricare pentru spațiile de nume PID. .P Un proces este vizibil pentru alte procese din spațiul său de nume PID și pentru procesele din fiecare spațiu de nume PID ancestru direct până la spațiul de nume PID rădăcină. În acest context, „vizibil” înseamnă că un proces poate fi ținta operațiilor unui alt proces care utilizează apeluri sistem care specifică un ID de proces. Invers, procesele dintr\-un spațiu de nume PID copil nu pot vedea procesele din spațiul de nume părinte și din spațiile de nume ancestru mai îndepărtate. Mai succint: un proces poate vedea (de exemplu, poate trimite semnale cu \fBkill\fP(2), poate stabili valori de curtoazie (nice) cu \fBsetpriority\fP(2) etc.) numai proceselor conținute în propriul său spațiu de nume PID și în descendenții acestui spațiu de nume. .P Un proces are un ID de proces în fiecare dintre straturile ierarhiei spațiului de nume PID în care este vizibil și se deplasează înapoi prin fiecare spațiu de nume ancestru direct până la spațiul de nume PID rădăcină. Apelurile sistemului care operează asupra ID\-urilor de proces operează întotdeauna folosind ID\-ul de proces care este vizibil în spațiul de nume PID al apelantului. Un apel la \fBgetpid\fP(2) returnează întotdeauna PID\-ul asociat cu spațiul de nume în care a fost creat procesul. .P Unele procese dintr\-un spațiu de nume PID pot avea părinți care sunt în afara spațiului de nume. De exemplu, părintele procesului inițial din spațiul de nume (și anume, procesul \fBinit\fP(1) cu PID 1) se află în mod necesar într\-un alt spațiu de nume. De asemenea, copiii direcți ai unui proces care utilizează \fBsetns\fP(2) pentru a determina copiii săi să se alăture unui spațiu de nume PID se află într\-un spațiu de nume PID diferit de cel care apelează \fBsetns\fP(2). Apelurile la \fBgetppid\fP(2) pentru astfel de procese returnează 0. .P În timp ce procesele pot coborî liber în spațiile de nume PID copil (de exemplu, utilizând \fBsetns\fP(2) cu un descriptor de fișier de spațiu de nume PID), acestea nu se pot deplasa în direcția opusă. Cu alte cuvinte, procesele nu pot intra în niciun spațiu de nume ancestru (părinte, bunic etc.). Schimbarea spațiilor de nume PID este o operație unidirecțională. .P .\" .\" ============================================================ .\" Operația \fBNS_GET_PARENT\fP \fBioctl\fP(2) poate fi utilizată pentru a descoperi relația parentală dintre spațiile de nume PID; a se vedea \fBioctl_nsfs\fP(2). .SS "Semanticele setns(2) și unshare(2)" Apelurile la \fBsetns\fP(2) care specifică un descriptor de fișier al spațiului de nume PID și apelurile la \fBunshare\fP(2) cu fanionul \fBCLONE_NEWPID\fP determină ca procesele\-copil create ulterior de apelant să fie plasate într\-un spațiu de nume PID diferit de cel al apelantului; (începând cu Linux 4.12, acel spațiu de nume PID este indicat prin intermediul fișierului \fI/proc/\fPpid\fI/ns/pid_for_children\fP, așa cum este descris în \fBnamespaces\fP(7)). Cu toate acestea, aceste apeluri nu modifică spațiul de nume PID al procesului apelant, deoarece acest lucru ar schimba ideea apelantului despre propriul său PID (așa cum este raportat de \fBgetpid\fP()), ceea ce ar rupe multe aplicații și biblioteci. .P Altfel spus: apartenența unui proces la spațiul de nume PID este determinată la crearea procesului și nu poate fi modificată ulterior. Printre altele, aceasta înseamnă că relația parentală dintre procese reflectă relația parentală dintre spațiile de nume PID: părintele unui proces fie se află în același spațiu de nume, fie se află în spațiul de nume PID al părintelui imediat. .P .\" .\" ============================================================ .\" Un proces poate apela \fBunshare\fP(2) cu fanionul \fBCLONE_NEWPID\fP o singură dată. După ce a efectuat această operație, legătura sa simbolică \fI/proc/\fPpid\fI/ns/pid_for_children\fP va fi goală până când primul proces\-copil este creat în spațiul de nume. .SS "Adoptarea proceselor\-copil orfane" .\" Furthermore, by definition, the parent of the "init" process .\" of a PID namespace resides in the parent PID namespace. .\" .\" ============================================================ .\" Când un proces\-copil devine orfan, acesta este transferat către procesul „init” din spațiul de nume PID al părintelui său (cu excepția cazului în care unul dintre strămoșii mai apropiați ai părintelui a utilizat comanda \fBprctl\fP(2) \fBPR_SET_CHILD_SUBREAPER\fP pentru a se marca drept colector al proceselor descendente orfane). Rețineți că, din cauza semanticii \fBsetns\fP(2) și \fBunshare\fP(2) descrise mai sus, acesta poate fi procesul „init” din spațiul de nume PID care este \fIpărintele\fP spațiului de nume PID al copilului, mai degrabă decât procesul „init” din propriul spațiu de nume PID al procesului\-copil. .SS "Compatibilitatea CLONE_NEWPID cu alte fanioane CLONE_*" În versiunile curente de Linux, \fBCLONE_NEWPID\fP nu poate fi combinat cu \fBCLONE_THREAD\fP. Firele trebuie să se afle în același spațiu de nume PID, astfel încât firele dintr\-un proces să își poată trimite semnale între ele. În mod similar, trebuie să fie posibil să se vadă toate firele unui proces în sistemul de fișiere \fBproc\fP(5). În plus, dacă două fire de execuție se află în spații de nume PID diferite, ID\-ul procesului care trimite un semnal nu poate fi codificat în mod semnificativ atunci când se trimite un semnal (a se vedea descrierea tipului \fIsiginfo_t\fP în \fBsigaction\fP(2)). Deoarece acesta este calculat atunci când un semnal este pus la coadă, o coadă de semnale partajată de procese în mai multe spații de nume PID ar împiedica acest lucru. .P .\" Note these restrictions were all introduced in .\" 8382fcac1b813ad0a4e68a838fc7ae93fa39eda0 .\" when CLONE_NEWPID|CLONE_VM was disallowed .\" (restriction lifted in faf00da544045fdc1454f3b9e6d7f65c841de302) .\" (restriction lifted in e79f525e99b04390ca4d2366309545a836c03bf1) .\" .\" ============================================================ .\" În versiunile anterioare de Linux, \fBCLONE_NEWPID\fP era în plus interzis (eșuând cu eroarea \fBEINVAL\fP) în combinație cu \fBCLONE_SIGHAND\fP (înainte de Linux 4.3), precum și cu \fBCLONE_VM\fP (înainte de Linux 3.12). Modificările care au eliminat aceste restricții au fost, de asemenea, adaptate la nucleele stabile anterioare. .SS "/proc și spațiile de nume PID" Un sistem de fișiere \fI/proc\fP afișează (în directoarele \fI/proc/\fPpid) numai procesele vizibile în spațiul de nume PID al procesului care a efectuat montarea, chiar dacă sistemul de fișiere \fI/proc\fP este vizualizat de procese din alte spații de nume. .P După crearea unui nou spațiu de nume PID, este util pentru procesul\-copil să își schimbe directorul rădăcină și să monteze o nouă instanță «procfs» la \fI/proc\fP, astfel încât instrumente precum \fBps\fP(1) să funcționeze corect. Dacă un nou spațiu de nume de montare este creat simultan prin includerea \fBCLONE_NEWNS\fP în argumentul \fIfanioane\fP al \fBclone\fP(2) sau \fBunshare\fP(2), atunci nu este necesar să se schimbe directorul rădăcină: o nouă instanță «procfs» poate fi montată direct pe \fI/proc\fP. .P Dintr\-un shell, comanda pentru a monta \fI/proc\fP este: .P .in +4n .EX $ mount \-t proc proc /proc .EE .in .P .\" .\" ============================================================ .\" Apelarea \fBreadlink\fP(2) pe ruta \fI/proc/self\fP produce ID\-ul procesului apelantului în spațiul de nume PID al montării «procfs» (adică spațiul de nume PID al procesului care a montat „procfs”). Acest lucru poate fi util în scopuri de introspecție, atunci când un proces dorește să își descopere PID\-ul în alte spații de nume. .SS "Fișiere /proc" .TP \fB/proc/sys/kernel/ns_last_pid\fP (începând cu Linux 3.3) .\" commit b8f566b04d3cddd192cfd2418ae6d54ac6353792 Acest fișier (care este virtualizat pentru fiecare spațiu de nume PID) afișează ultimul PID care a fost alocat în acest spațiu de nume PID. Atunci când următorul PID este alocat, nucleul va căuta cel mai mic PID nealocat care este mai mare decât această valoare, iar atunci când acest fișier este citit ulterior, va afișa acel PID. .IP .\" This ability is necessary to support checkpoint restore in user-space .\" .\" ============================================================ .\" Acest fișier poate fi scris de către un proces care are capacitatea \fBCAP_SYS_ADMIN\fP sau (începând cu Linux 5.9) \fBCAP_CHECKPOINT_RESTORE\fP în spațiul de nume al utilizatorului care deține spațiul de nume PID. Acest lucru face posibilă determinarea PID\-ului care este alocat următorului proces care este creat în acest spațiu de nume PID. .SS Diverse Atunci când un ID de proces este transmis printr\-un soclu de domeniu UNIX unui proces dintr\-un spațiu de nume PID diferit (a se vedea descrierea \fBSCM_CREDENTIALS\fP în \fBunix\fP(7)), acesta este tradus în valoarea PID corespunzătoare în spațiul de nume PID al procesului receptor. .SH STANDARDE Linux. .SH EXEMPLE A se vedea \fBuser_namespaces\fP(7). .SH "CONSULTAȚI ȘI" \fBclone\fP(2), \fBreboot\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcapabilities\fP(7), \fBcredentials\fP(7), \fBmount_namespaces\fP(7), \fBnamespaces\fP(7), \fBuser_namespaces\fP(7), \fBswitch_root\fP(8) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .