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
.