跨平台通过python中的进程名称获取PID的方法 [英] Cross-platform way to get PIDs by process name in python

查看:705
本文介绍了跨平台通过python中的进程名称获取PID的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

几个同名进程正在主机上运行.使用 python jython 按名称获取那些进程的PID的跨平台方法是什么?

Several processes with the same name are running on host. What is the cross-platform way to get PIDs of those processes by name using python or jython?

  1. 我想要类似pidof的东西,但是在python中. (反正我没有pidof.)
  2. 我无法解析/proc,因为它可能不可用(在HP-UX上).
  3. 我不想运行os.popen('ps')并解析输出,因为我认为它很丑陋(不同操作系统中的字段顺序可能有所不同).
  4. 目标平台是Solaris,HP-UX,也许还有其他平台.
  1. I want something like pidof but in python. (I don't have pidof anyway.)
  2. I can't parse /proc because it might be unavailable (on HP-UX).
  3. I do not want to run os.popen('ps') and parse the output because I think it is ugly (field sequence may be different in different OS).
  4. Target platforms are Solaris, HP-UX, and maybe others.

推荐答案

您可以使用psutil( https://github .com/giampaolo/psutil ),可在Windows和UNIX上运行:

You can use psutil (https://github.com/giampaolo/psutil), which works on Windows and UNIX:

import psutil

PROCNAME = "python.exe"

for proc in psutil.process_iter():
    if proc.name() == PROCNAME:
        print(proc)

在我的机器上它会打印:

On my machine it prints:

<psutil.Process(pid=3881, name='python.exe') at 140192133873040>

编辑2017-04-27-这是一个更高级的实用程序功能,可根据进程的name(),cmdline()和exe()检查名称:

EDIT 2017-04-27 - here's a more advanced utility function which checks the name against processes' name(), cmdline() and 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(name)
    return ls

这篇关于跨平台通过python中的进程名称获取PID的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆