如何获取进程的祖父进程ID
我怎么能获取当前进程的父进程的ID呢?
一般来说,给定一个进程ID,我怎么能找到它的父进程ID呢?
比如,os.getpid()可以用来获取当前进程的ID,而os.getppid()可以用来获取父进程的ID,那我怎么才能获取祖父进程的ID呢?
我的目标是Linux(Ubuntu),所以针对这个平台的回答也可以。
7 个回答
5
我觉得用Python来做这个事情可能不太方便。不过有两种方法可以尝试。
- 你可以通过运行
ps
这个命令来获取相关信息,然后分析这些信息。 - 如果你的系统有
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()