如何获取进程的祖父进程ID

8 投票
7 回答
16053 浏览
提问于 2025-04-15 15:58

我怎么能获取当前进程的父进程的ID呢?
一般来说,给定一个进程ID,我怎么能找到它的父进程ID呢?
比如,os.getpid()可以用来获取当前进程的ID,而os.getppid()可以用来获取父进程的ID,那我怎么才能获取祖父进程的ID呢?

我的目标是Linux(Ubuntu),所以针对这个平台的回答也可以。

7 个回答

5

我觉得用Python来做这个事情可能不太方便。不过有两种方法可以尝试。

  1. 你可以通过运行ps这个命令来获取相关信息,然后分析这些信息。
  2. 如果你的系统有proc文件系统,你可以打开/proc/<pid>/status这个文件,找到包含PPid:的那一行,然后对那个PID做同样的操作。

比如,下面这个脚本可以帮你获取你的PID、PPID和PPPID,前提是你有权限:

#!/bin/bash
pid=$$
ppid=$(grep PPid: /proc/${pid}/status | awk '{print $2'})
pppid=$(grep PPid: /proc/${ppid}/status | awk '{print $2'})
echo ${pid} ${ppid} ${pppid}
ps -f -p "${pid},${ppid},${pppid}"

运行后会得到:

3269 3160 3142
UID        PID  PPID  C STIME TTY          TIME CMD
pax       3142  2786  0 18:24 pts/1    00:00:00 bash
root      3160  3142  0 18:24 pts/1    00:00:00 bash
root      3269  3160  0 18:34 pts/1    00:00:00 /bin/bash ./getem.sh

显然,你需要用Python来打开这些文件。

24

通过使用 psutil 这个库(你可以在这里找到它: https://github.com/giampaolo/psutil):

>>> import psutil
>>> psutil.Process().ppid()
2335
>>> psutil.Process().parent()
<psutil.Process (pid=2335, name='bash', cmdline='bash') at 140052120886608>
>>> 
7

与Linux相关的内容:

os.popen("ps -p %d -oppid=" % os.getppid()).read().strip()

撰写回答