【问题标题】:Find Process ID active when process name is given给定进程名称时查找进程 ID 处于活动状态
【发布时间】:2014-01-19 19:43:43
【问题描述】:

我正在使用 python 2.7 和 windows。我想找出给定进程名称时活动的进程 ID 列表。

import time
import win32pdh
def GetProcessID( name ) :
    object = "Process"
    items, instances = win32pdh.EnumObjectItems( None, None, object,
                                                 win32pdh.PERF_DETAIL_WIZARD )
    val = None
    if name in instances :
        hq = win32pdh.OpenQuery()
        hcs = [ ]
        item = "ID Process"
        path = win32pdh.MakeCounterPath( ( None, object, name, None, 0, item ) )
        hcs.append( win32pdh.AddCounter( hq, path ) )
        win32pdh.CollectQueryData( hq )
        time.sleep( 0.01 )
        win32pdh.CollectQueryData( hq )

        for hc in hcs:
            type, val = win32pdh.GetFormattedCounterValue( hc, win32pdh.PDH_FMT_LONG )
            win32pdh.RemoveCounter( hc )
        win32pdh.CloseQuery( hq )
        return val
hh=GetProcessID("python")        

在上面的代码中,即使两个 python 进程正在运行,我也只有一个进程 ID。我的查询是如何使用 python 进程获取所有处于活动状态的进程 ID

【问题讨论】:

    标签: python windows python-2.7 process


    【解决方案1】:

    您可以使用psutil 获取此信息:

    import psutil
    
    NoNameAccesses = []
    for p in psutil.process_iter():
       try: 
          if p.name.startswith('python'):
              print (p.name, p.pid)
       except psutil._error.AccessDenied:
           # Handle where the user does not have permission to get the name 
           NoNameAccesses.append(p.pid)
    
    if len(NoNameAccesses) > 0:
        print ("Warning: You don't have access to he following processes:")
        print (NoNameAccesses)
    

    感谢 Bakuriu 的评论更正

    【讨论】:

    • 这将引发AttributeError。正确的函数是psutil.process_iter()
    • @SteveBarnes 出现以下错误,回溯(最后一次调用):文件“D:\pythonWorkspace\deskApp\src\processkill.py”,第 51 行,在 中,如果 p.name .startswith('python'): 文件“C:\Python27\lib\site-packages\psutil_common.py”,第 85 行,在 get 中 ret = self.func(instance) 文件“C: \Python27\lib\site-packages\psutil_init_.py",第 345 行,名称为 name = self._platform_impl.get_process_name()
    • @SteveBarnes 文件“C:\Python27\lib\site-packages\psutil_psmswindows.py”,第 195 行,在包装器中返回 fun(self, *args, **kwargs) 文件“C:\ Python27\lib\site-packages\psutil_psmswindows.py",第 227 行,在 get_process_name 返回 os.path.basename(self.get_process_exe()) 文件 "C:\Python27\lib\site-packages\psutil_psmswindows.py",行199,在包装提升 AccessDenied(self.pid, self._process_name) psutil._error.AccessDenied: (pid=592)
    • 如果您收到此错误消息,那么您没有获得一个或多个进程名称所需的权限。
    • @SteveBarnes 如何获得此权限
    【解决方案2】:

    您可以尝试调用“tasklist”并处理输出。

    例如在Tasklist output中描述为答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多