如何使用Python在Mac OSX中检查进程是否正在运行

4

我正在使用 Mac OSX 10.9 上的 Python 2.7。

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

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

3个回答

7

尝试这个。如果返回进程ID,则表示您的进程正在运行。请使用您的进程名称代替 firefox

# Python2
import commands
commands.getoutput('pgrep firefox')

由于在Python 3x中不再使用命令模块,因此我们可以在这里使用subprocess模块来获取进程ID。

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

这里的my_pid将成为进程id

是的,在Python 3.x中我们无法使用这个模块。我们可以使用“subprocess”模块代替。 - salmanwahed
这是解决这个问题的一种方法。但我不明白你所说的纯Python是什么意思。谢谢。 - salmanwahed
尽管这个基于pgrep的答案是我唯一可行的选择,并且它可以工作 - 但'pgrep'是一个命令行工具,不总是可用,并且不是Python的一部分。很奇怪的是,在Python标准库中没有任何东西(即使在“subprocess”模块中)可以帮助您通过名称找到某个进程的pid。除此之外,还要指出可能有几个具有相同名称的进程,并且您需要对pgrep结果应用一些逻辑,或者至少使用-n('pgrep -n firefox')运行它以将其限制为具有该名称的最新进程。 - Motti Shneor

4

使用模块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
@imp 现在已经在答案中提供了获取正在运行的进程名称的解决方案。只需找到您感兴趣的进程名称即可。 - Jan Bednařík
在Python3中,使用psutil.pids()获取pid。 - Max Lobur

1

我刚刚尝试了上述代码,但在使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接