How do I get a process list of all running processes from Python, on Unix, containing then name of the command/process and process id, so I can filter and kill processes.
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
.
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, PIPE
process = 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.
subprocess
module - so 2.4-2.7, 3.5+. –
Secondclass 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
.
Install psutil:
$pip install psutil
Import psutil:
>>> import psutil
Define list where process list is to be saved:
>>> processlist=list()
Append processes in list:
>>> for process in psutil.process_iter():
processlist.append(process.name())
Get Process list:
>>> print(processlist)
Full code:
import psutil
processlist=list()
for process in psutil.process_iter():
processlist.append(process.name())
print(processlist)
Why Python?
You can directly use killall
on the process name.
ps
output for the command name, gather process id values and then kill, when the killall
does it for you? –
Av kill
part; it can be simply, how do I get the process list in Python?
–
Av © 2022 - 2024 — McMap. All rights reserved.