如何获得进程的祖父母id

Anu*_*yal 7 python linux subprocess process

如何获取当前进程父进程的进程ID?
一般来说,给定一个进程ID如何获取其父进程ID?
例如,os.getpid()可用于获取proccess id,而os.getppid()可用于父级,如何获得祖父母,

我的目标是linux(ubuntu),所以平台特定的答案是可以的.

Gia*_*olà 22

通过使用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>
>>> 
Run Code Online (Sandbox Code Playgroud)


pix*_*eat 7

linux具体:

os.popen("ps -p %d -oppid=" % os.getppid()).read().strip()
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 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}"
Run Code Online (Sandbox Code Playgroud)

产生:

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
Run Code Online (Sandbox Code Playgroud)

显然,您必须使用 Python 打开这些文件。