python - 在 python 中通过进程名称获取 PID 的跨平台方法

标签 python cross-platform jython hp-ux

主机上正在运行多个同名进程。使用 pythonjython 按名称获取这些进程的 PID 的跨平台方法是什么?

  1. 我想要类似 pidof 但在 python 中的东西。 (反正我没有 pidof。)
  2. 我无法解析 /proc,因为它可能不可用(在 HP-UX 上)。
  3. 我不想运行 os.popen('ps') 并解析输出,因为我认为它很难看(不同操作系统中的字段顺序可能不同)。
  4. 目标平台是 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/

相关文章:

python - 计算 python 字典/数组数据结构的非空端叶 - 递归算法?

python - 有没有办法动态改变文本颜色?

c# - Unity 最小化电池使用

android - 适用于 iPhone 和 Android 的最佳跨平台开发工具

python - 抽象 Django 类中的多个外键字段

python - Pandas :我可以过滤数据框以仅获取彼此之间相差 50% 的行吗?

iphone - 当今最常用的跨平台移动应用程序开发框架是什么?

python - 我可以用 Jython 运行 numpy 和 pandas 吗?

groovy - Groovy优于Jython或Jruby?

java - 从 jython 调用 java 方法的右重载