如何在 Unix 上从 Python 获取所有正在运行的进程的进程列表,其中包含命令/进程的名称和进程 ID,以便我可以过滤和终止进程。
问问题
29540 次
5 回答
16
Python 中正确的可移植解决方案是使用psutil。您有不同的 API 与 PID 交互:
>>> 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()
...如果您想“搜索并杀死”:
for p in psutil.process_iter():
if 'nginx' in p.name() or 'nginx' in ' '.join(p.cmdline()):
p.terminate()
p.wait()
于 2017-03-28T09:39:13.907 回答
10
在 Linux 上,使用适当的最新 Python,其中包含以下subprocess
模块:
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
您可能需要根据您的确切需要稍微调整 ps 命令。
于 2009-07-07T10:02:17.660 回答
1
在 linux 上,最简单的解决方案可能是使用外部ps
命令:
>>> 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')]]
在其他系统上,您可能必须将选项更改为ps
.
不过,您可能希望man
在pgrep
and上运行pkill
。
于 2009-07-07T10:01:45.947 回答
0
安装psutil:
$pip install psutil
导入psutil:
>>> import psutil
定义要保存进程列表的列表:
>>> processlist=list()
在列表中追加进程:
>>> for process in psutil.process_iter():
processlist.append(process.name())
获取进程列表:
>>> print(processlist)
完整代码:
import psutil
processlist=list()
for process in psutil.process_iter():
processlist.append(process.name())
print(processlist)
于 2021-10-18T16:47:26.807 回答
-8
为什么是 Python?
您可以直接killall
在进程名称上使用。
于 2009-07-07T09:45:20.127 回答