gpt4 book ai didi

python - linux中看似没有正常系统调用,python如何判断PID?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:22 25 4
gpt4 key购买 nike

运行以下命令时

strace -f python3 -c 'import os; print(os.getpid())'

我注意到 strace 没有捕捉到对 getpid(2) 系统调用的调用。我首先认为这是由于 glibc 缓存了 pid,但是在没有至少一个真正的系统调用的情况下,不应该有 libc 缓存的 pid。然后我认为 vdso 可能是罪魁祸首,但运行一个通过 libc 进行此系统调用的 C 程序会在跟踪时显示 getpid 调用。终于放弃了,查了一下os.getpid python模块的源码,貌似是在Modules/posixmodule.c中定义的。出乎我的意料(以及随后的困惑),它会正常调用 getpid!

所以我的问题是:python是如何判断os.getpid的结果的?如果这样的值确实是通过调用 getpid 获得的,那么该调用实际上是如何进行的?

最佳答案

The way the vdso works除其他事项外,将特定于进程的变量映射到 vdso 函数知道如何读取的用户空间。其中之一是当前进程 ID,因此 gettimeofday 无需进行系统调用即可访问该信息。

现在,特别是对于 getpid,它实际上并不是一个 VDSO 调用。在 2.25 之前的 glibc 中,该库会缓存调用,并且由于部分 Python 运行时调用 getpid,因此在第一次调用之后不会再调用它。从 2.25 开始,该库不再缓存进程 ID,因此每次 getpid 调用都会产生一个系统调用。

关于python - linux中看似没有正常系统调用,python如何判断PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com