getpid(2)

ИМЯ
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.