Question

In Python, I start a new process via Popen(), which works fine. Now in the child process I want to find the parent's process ID.

What is the best way to achieve this, maybe I can pass the PID via the Popen constructor, but how? Or is there a better way to do so?

PS: If possible I would prefere a solution using only standard libraries.

Was it helpful?

Solution

You can use os.getppid():

os.getppid()

Return the parent’s process id.

Note: this works only on Unix, not on Windows. On Windows you can use os.getpid() in the parent process and pass the pid as argument to the process you start with Popen.

Windows support for os.getppid was added in Python 3.2.

OTHER TIPS

Use psutil (here)

import psutil, os
psutil.Process(os.getpid()).ppid()

works both for Unix & Windows (even if os.getppid() doesn't exist on this platform)

ppid() is a member method, not variable, of Process, so the above needs to be changed to include the parenthesis.

Source: psutil documentation

If you don't want to use psutil (e.g. because your environment makes installing dependencies and IT request), here's how you can do it manually on Linux.

def get_parent_process_id(pid: int) -> int:
    # Read /proc/<pid>/status and look for the line `PPid:\t120517\n`
    with open(f"/proc/{pid}/status", encoding="ascii") as f:
        for line in f.readlines():
            if line.startswith("PPid:\t"):
                return int(line[6:])
    raise Exception(f"No PPid line found in /proc/{pid}/status")
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top