Provided by: manpages-ru-dev_4.21.0-2_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
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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

Linux man-pages 6.03                            22 января 2023 г.                                      getpid(2)