Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       getpid, getppid - получение идентификатора процесса

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <unistd.h>

       pid_t getpid(void);
       pid_t getppid(void);

ОПИСАНИЕ

       Вызов  getpid()  возвращает  идентификатор  (PID)  вызвавшего процесса (часто используется
       функциями, которые генерируют уникальные имена временных файлов).

       Вызов getppid() возвращает идентификатор процесса, являющегося родительским по отношению к
       вызвавшему  процессу. Результат равен идентификатору процесса, который создал этот процесс
       с помощью fork(), или идентификатору процесса, который заместил родителя (или init(1), или
       процесс   «сборщик»,   определённый  с  помощью  операции  PR_SET_CHILD_SUBREAPER  вызовом
       prctl(2)), если этот процесс уже завершён.

ОШИБКИ

       Функции всегда завершаются успешно.

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008, 4.3BSD, SVr4.

ЗАМЕЧАНИЯ

       Если  родитель  вызывающего   находит   в   другом   пространстве   имён   PID   (смотрите
       pid_namespaces(7)), то getppid() возвращает 0.

       Со  стороны  ядра  PID  (одинаков  у  всех  нитей в многонитевом процессе) иногда называют
       идентификатором группы нитей (TGID). Он отличается от идентификатора нити  (TID),  который
       является  уникальным  для  каждой  нити.  Подробней  смотрите в gettid(2) и описание флага
       CLONE_THREAD в clone(2).

   Отличия между библиотекой C и ядром
       From glibc 2.3.4 up to and including glibc 2.24, the glibc wrapper function  for  getpid()
       cached  PIDs,  with  the  goal  of  avoiding  additional system calls when a process calls
       getpid()  repeatedly.  Normally this caching was  invisible,  but  its  correct  operation
       relied  on  support  in  the  wrapper functions for fork(2), vfork(2), and clone(2): if an
       application bypassed the glibc wrappers for these system calls by using syscall(2), then a
       call  to  getpid()   in  the  child  would return the wrong value (to be precise: it would
       return the PID of the parent process).  In  addition,  there  were  cases  where  getpid()
       could  return the wrong value even when invoking clone(2)  via the glibc wrapper function.
       (For a discussion of one such case, see BUGS in clone(2).)  Furthermore, the complexity of
       the caching code had been the source of a few bugs within glibc over the years.

       Because  of the aforementioned problems, since glibc 2.25, the PID cache is removed: calls
       to getpid()  always invoke the actual system call, rather than returning a cached value.

       На  Alpha  вместо  пары  системных  вызовов  getpid()  и  getppid()  предоставляется  один
       getxpid(),  который  возвращает  пару  PID  и  родительский  PID. Обёрточные функции glibc
       getpid() и getppid()  скрывают  это.  Подробности  об  отображении  регистров  смотрите  в
       syscall(2).

СМ. ТАКЖЕ

       clone(2),  fork(2),  gettid(2),  kill(2),  exec(3),  mkstemp(3),  tempnam(3),  tmpfile(3),
       tmpnam(3), credentials(7), pid_namespaces(7)

ПЕРЕВОД

       Русский   перевод   этой    страницы    руководства    был    сделан    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,    Dmitry   Bolkhovskikh   <d20052005@yandex.ru>,   Vladislav
       <ivladislavefimov@gmail.com>,   Yuri   Kozlov   <yuray@komyakino.ru>   и    Иван    Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.