How to check if there exists a process with a given pid in Python? How to check if there exists a process with a given pid in Python? python python

How to check if there exists a process with a given pid in Python?


Sending signal 0 to a pid will raise an OSError exception if the pid is not running, and do nothing otherwise.

import osdef check_pid(pid):            """ Check For the existence of a unix pid. """    try:        os.kill(pid, 0)    except OSError:        return False    else:        return True


Have a look at the psutil module:

psutil (python system and process utilities) is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network) in Python. [...] It currently supports Linux, Windows, OSX, FreeBSD and Sun Solaris, both 32-bit and 64-bit architectures, with Python versions from 2.6 to 3.4 (users of Python 2.4 and 2.5 may use 2.1.3 version). PyPy is also known to work.

It has a function called pid_exists() that you can use to check whether a process with the given pid exists.

Here's an example:

import psutilpid = 12345if psutil.pid_exists(pid):    print("a process with pid %d exists" % pid)else:    print("a process with pid %d does not exist" % pid)

For reference:


mluebke code is not 100% correct; kill() can also raise EPERM (access denied) in which case that obviously means a process exists. This is supposed to work:

(edited as per Jason R. Coombs comments)

import errnoimport osdef pid_exists(pid):    """Check whether pid exists in the current process table.    UNIX only.    """    if pid < 0:        return False    if pid == 0:        # According to "man 2 kill" PID 0 refers to every process        # in the process group of the calling process.        # On certain systems 0 is a valid PID but we have no way        # to know that in a portable fashion.        raise ValueError('invalid PID 0')    try:        os.kill(pid, 0)    except OSError as err:        if err.errno == errno.ESRCH:            # ESRCH == No such process            return False        elif err.errno == errno.EPERM:            # EPERM clearly means there's a process to deny access to            return True        else:            # According to "man 2 kill" possible error values are            # (EINVAL, EPERM, ESRCH)            raise    else:        return True

You can't do this on Windows unless you use pywin32, ctypes or a C extension module.If you're OK with depending from an external lib you can use psutil:

>>> import psutil>>> psutil.pid_exists(2353)True