При выполнении следующей команды
strace -f python3 -c 'import os; print(os.getpid())'
Я заметил, что strace не перехватывает вызов системного вызова getpid
(2). Сначала я подумал, что это происходит из-за glibc-кэширования pid, но не должно быть pid для кэширования libc без хотя бы одного реального системного вызова. Затем я подумал, что, возможно, виновным было vdso, но при запуске программы на C, которая делает этот системный вызов через libc, при вызове strace показывается вызов getpid
. Я наконец сдался и посмотрел на источник модуля os.getpid
python, который, кажется, определен в Modules/posixmodule.c
. К моему удивлению (и последующему замешательству), он делает обычный вызов getpid
!
Итак, мой вопрос: как python определяет результат os.getpid
? и если такое значение действительно получается с помощью вызова getpid
, как на самом деле выполняется этот вызов?