【问题标题】:How to check in Mac OSX with Python if a process is RUNNING or not如果进程正在运行,如何使用 Python 签入 Mac OSX
【发布时间】:2014-04-10 10:06:39
【问题描述】:

我在 mac osx 10.9 上使用 python 2.7。

我想检查一个进程是否正在运行。 我查看了这个Q&A,但结果并不理想。

我想检查是否有特定名称的进程正在运行

【问题讨论】:

    标签: python macos process activity-monitor


    【解决方案1】:

    试试这个。如果它返回一个进程 id,那么你有这个进程正在运行。使用您的进程名称而不是 firefox

    import commands
    commands.getoutput('pgrep firefox')
    

    由于命令模块不再在 python 3x 中,我们可以在这里使用subprocess 模块接收进程 ID。

    import subprocess
    process = subprocess.Popen('pgrep firefox', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    my_pid, err = process.communicate()
    

    这里 my_pid 将是进程 ID。

    【讨论】:

    • 是的。在 python3x 中我们不能使用这个模块。我们可以改用subprocess 模块。
    • 这是解决此问题的一种方法。但我没有明白你所说的纯 Python 是什么意思。谢谢。
    • 虽然这个基于 pgrep 的答案对我来说是唯一可行的答案,而且它有效 - 'pgrep' 仍然是一个命令行工具,并不总是可用,并且不是 python 的一部分。有点奇怪的是,Python 标准库中的任何内容(甚至在“子进程”模块中)都无法帮助您通过名称找到某个进程的 pid。除此之外,重要的是要说明可能有几个进程具有相同的名称,并且您需要对 pgrep 结果应用一些逻辑,或者至少使用 -n ('pgrep -n firefox') 运行它来限制使用该名称的最新进程。
    【解决方案2】:

    使用模块psutil。例如:

    import psutil
    
    ...    
    
    if pid in psutil.get_pid_list():
        print pid, "is running"
    

    编辑:您可以像这样获取所有正在运行的进程的 pid 和名称:

    for p in psutil.process_iter():
        if p.name == 'firefox':
            print "firefox is running"
            break
    

    【讨论】:

    • 不知道进程的进程ID。我想检查是否有任何特定名称的进程正在运行。
    • @imp 解决方案如何获取正在运行的进程的名称现在正在回答中。只需找到您感兴趣的进程名称即可。
    • python3 的 psutil.pids() 中的 pid
    【解决方案3】:

    我只是在尝试上面的代码,但它对我使用 python 2.7 不起作用没有在 python 3 上尝试过代码。发布更新的代码,它可能会对某人有所帮助

    for p in psutil.process_iter(): #iterate through all running processes 
        if p.name() == 'firefox':
            print "firefox is running"
            break
    

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2011-10-09
      • 2018-05-02
      相关资源
      最近更新 更多