运行以下命令时
strace -f python3 -c 'import os; print(os.getpid())'
我注意到 strace 没有捕获对getpid
(2) 系统调用的调用。我首先认为这是由于 glibc 缓存了 pid,但是如果没有至少一个真正的系统调用,就不应该有一个 pid 供 libc 缓存。然后我认为可能是 vdso 是罪魁祸首,但是运行一个通过 libc 进行此系统调用的 C 程序会getpid
在跟踪时显示调用。终于放弃了,查了一下os.getpid
python模块的源码,貌似是定义在Modules/posixmodule.c
. 令我惊讶的是(以及随后的困惑),它正常调用getpid
!
所以我的问题是:python如何确定结果os.getpid
?如果确实通过调用获得了这样的值getpid
,那么该调用实际上是如何进行的?