getpid, getppid -
получение
идентификатора
процесса
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).
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 <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Vladislav <
[email protected]>,
Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]