table of contents
GETPID(2) | Manualul programatorului Linux | GETPID(2) |
NUME¶
getpid, getppid - obține identificatorul procesului
REZUMAT¶
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
DESCRIERE¶
getpid() returnează identificatorul de proces (PID) al procesului apelant (acest lucru este adesea utilizat de rutinele care generează nume de fișiere temporare unice).
getppid() returnează identificatorul de proces al procesului părinte al procesului apelant. Acesta va fi fie identificatorul procesului care a creat acest proces cu ajutorul fork(), fie, dacă acest proces s-a încheiat deja, identificatorul procesului căruia i-a fost reafiliat acest proces (fie init(1), fie un proces „subreaper” definit prin operația prctl(2) PR_SET_CHILD_SUBREAPER).es).
ERORI¶
Aceste funcții au întotdeauna succes.
ÎN CONFORMITATE CU¶
POSIX.1-2001, POSIX.1-2008, 4.3BSD, SVr4.
NOTE¶
Dacă părintele apelantului se află într-un spațiu de nume PID diferit (a se vedea pid_namespaces(7)), getppid() returnează 0.
Din perspectiva nucleului, PID-ul (care este partajat de toate firele de execuție dintr-un proces cu mai multe fire de execuție) este uneori cunoscut și sub numele de identificatorul grupului de fire de execuție (TGID). Acest lucru contrastează cu identificatorul de fire de execuție din nucleu (TID), care este unic pentru fiecare fir de execuție. Pentru mai multe detalii, consultați gettid(2) și discuția despre fanionul CLONE_THREAD din clone(2).
diferențe între biblioteca C și nucleu¶
De la versiunea glibc 2.3.4 până la versiunea 2.24 inclusiv, funcția de învăluire glibc pentru getpid() a pus în memoria cache PID-urile, cu scopul de a evita apelurile de sistem suplimentare atunci când un proces apela getpid() în mod repetat. În mod normal, această memorare era invizibilă, dar funcționarea sa corectă se baza pe suportul din funcțiile de învăluire pentru fork(2), vfork(2) și clone(2): dacă o aplicație ocolea funcțiile de învăluire glibc pentru aceste apeluri de sistem utilizând syscall(2), atunci un apel la getpid() în procesul copil ar returna o valoare greșită (mai exact: ar returna PID-ul procesului părinte). În plus, au existat cazuri în care getpid() ar putea returna o valoare greșită chiar și atunci când se apela clone(2) prin intermediul funcției de învăluire glibc. (Pentru o discuție despre un astfel de caz, consultați ERORI in clone(2).) În plus, complexitatea codului de memorare în cache fusese sursa câtorva erori în cadrul glibc de-a lungul anilor.
Din cauza problemelor menționate mai sus, începând cu versiunea 2.25 a glibc, memoria cache PID este eliminată: apelurile către getpid() invocă întotdeauna apelul de sistem real, în loc să returneze o valoare din memoria cache.
CONSULTAȚI ȘI¶
clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3), credentials(7), pid_namespaces(7)
COLOFON -- NOTà FINALö
Această pagină face parte din versiunea 4.16 a proiectului Linux man-pages. O descriere a proiectului, informații despre raportarea erorilor și cea mai recentă versiune a acestei pagini pot fi găsite la https://www.kernel.org/doc/man-pages/.
TRADUCERE¶
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
26 noiembrie 2017 | Linux |