主机上正在运行多个同名进程。使用 python 或 jython 按名称获取这些进程的 PID 的跨平台方法是什么?
- 我想要类似
pidof
但在 python 中的东西。 (反正我没有pidof
。) - 我无法解析
/proc
,因为它可能不可用(在 HP-UX 上)。 - 我不想运行
os.popen('ps')
并解析输出,因为我认为它很难看(不同操作系统中的字段顺序可能不同)。 - 目标平台是 Solaris、HP-UX 等。
最佳答案
您可以使用适用于 Windows 和 UNIX 的 psutil (https://github.com/giampaolo/psutil):
import psutil
PROCNAME = "python.exe"
for proc in psutil.process_iter():
if proc.name() == PROCNAME:
print(proc)
在我的机器上打印:
<psutil.Process(pid=3881, name='python.exe') at 140192133873040>
编辑 2017-04-27 - 这是一个更高级的实用程序函数,它根据进程的 name()、cmdline() 和 exe() 检查名称:
import os
import psutil
def find_procs_by_name(name):
"Return a list of processes matching 'name'."
assert name, name
ls = []
for p in psutil.process_iter():
name_, exe, cmdline = "", "", []
try:
name_ = p.name()
cmdline = p.cmdline()
exe = p.exe()
except (psutil.AccessDenied, psutil.ZombieProcess):
pass
except psutil.NoSuchProcess:
continue
if name == name_ or cmdline[0] == name or os.path.basename(exe) == name:
ls.append(p)
return ls
关于python - 在 python 中通过进程名称获取 PID 的跨平台方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550653/