pythonpid

How to find the PID of a process?


I am running a script in Linux by calling python test09.py&. In another shell, I can use the ps command to get the process ID of the running script:

ps -ef | grep "python test09.py&"

How can I get the PID of that script using python code instead?


Solution

  • If you just want the pid of the current script, then use os.getpid:

    import os
    pid = os.getpid()
    

    However, below is an example of using psutil to find the pids of python processes running a named python script. This could include the current process, but the main use case is for examining other processes, because for the current process it is easier just to use os.getpid as shown above.

    sleep.py

    #!/usr/bin/env python
    import time
    time.sleep(100)
    

    get_pids.py

    import os
    import psutil
    
    
    def get_pids_by_script_name(script_name):
    
        pids = []
        for proc in psutil.process_iter():
    
            try:
                cmdline = proc.cmdline()
                pid = proc.pid
            except psutil.NoSuchProcess:
                continue
    
            if (len(cmdline) >= 2
                and 'python' in cmdline[0]
                and os.path.basename(cmdline[1]) == script_name):
    
                pids.append(pid)
    
        return pids
    
    
    print(get_pids_by_script_name('sleep.py'))
    

    Running it:

    $ chmod +x sleep.py
    
    $ cp sleep.py other.py
    
    $ ./sleep.py &
    [3] 24936
    
    $ ./sleep.py &
    [4] 24937
    
    $ ./other.py &
    [5] 24938
    
    $ python get_pids.py 
    [24936, 24937]