【问题标题】:Check if PID exists on Windows with Python without requiring libraries在不需要库的情况下使用 Python 检查 Windows 上是否存在 PID
【发布时间】:2013-07-11 08:17:36
【问题描述】:

有没有一种方法可以在不需要库的情况下使用 Python 检查 Windows 上是否存在 PID?怎么做?

【问题讨论】:

  • 你指的是任何库(包括python标准库)还是只是外部库?
  • 库是指任何相对较大的代码,我必须包含在我的项目中或添加到依赖项列表中(使用easy_installpip 或其他方式安装)
  • 它可以像psutil.pid_exists(pid) 一样简单...
  • 如果 psutil 在标准库中。

标签: python windows


【解决方案1】:

这可以用一小杯 WINAPI 解决。

def pid_running(pid):
    import ctypes
    kernel32 = ctypes.windll.kernel32
    SYNCHRONIZE = 0x100000

    process = kernel32.OpenProcess(SYNCHRONIZE, 0, pid)
    if process != 0:
        kernel32.CloseHandle(process)
        return True
    else:
        return False

【讨论】:

  • 您能指定操作系统版本和架构吗?
  • Windows 8.1,x64。我认为您需要在打开进程之后使用第二个 API 调用检查退出结果,以使该技术在所有版本的 Windows 上可靠地工作。
  • 似乎只要它与被检查的进程使用同一用户运行,它就可以工作。
  • 嗯。我在 win8.1 中从提升的命令提示符运行,然后启动 python,然后运行子进程,但它不起作用。
  • 如果你要启动一个子进程,用.poll()代替不是更可靠吗? PID 可以回收。
【解决方案2】:

这适用于我的系统..

>>> import subprocess
>>> out = subprocess.check_output(["tasklist","/fi","PID eq 1234"]).strip()
>>> if out == "INFO: No tasks are running which match the specified criteria.":
...   print "No such PID :D"
...
No such PID :D

【讨论】:

  • 但不适用于 Windows 未设置英语语言环境的任何人。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2013-04-12
相关资源
最近更新 更多