how do I get the process list in Python? how do I get the process list in Python? unix unix

how do I get the process list in Python?


The right portable solution in Python is using psutil. You have different APIs to interact with PIDs:

>>> import psutil>>> psutil.pids()[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, ..., 32498]>>> psutil.pid_exists(32498)True>>> p = psutil.Process(32498)>>> p.name()'python'>>> p.cmdline()['python', 'script.py']>>> p.terminate()>>> p.wait()

...and if you want to "search and kill":

for p in psutil.process_iter():    if 'nginx' in p.name() or 'nginx' in ' '.join(p.cmdline()):        p.terminate()        p.wait()


On Linux, with a suitably recent Python which includes the subprocess module:

from subprocess import Popen, PIPEprocess = Popen(['ps', '-eo' ,'pid,args'], stdout=PIPE, stderr=PIPE)stdout, notused = process.communicate()for line in stdout.splitlines():    pid, cmdline = line.split(' ', 1)    #Do whatever filtering and processing is needed

You may need to tweak the ps command slightly depending on your exact needs.


On linux, the easiest solution is probably to use the external ps command:

>>> import os>>> data = [(int(p), c) for p, c in [x.rstrip('\n').split(' ', 1) \...        for x in os.popen('ps h -eo pid:1,command')]]

On other systems you might have to change the options to ps.

Still, you might want to run man on pgrep and pkill.