如何在Linux上用Python检查进程是否仍在运行?

39 投票
9 回答
104961 浏览
提问于 2025-04-11 09:14

我找到的唯一一个不错的方法是:

import sys
import os

try:
        os.kill(int(sys.argv[1]), 0)
        print "Running"
except:
        print "Not running"

(来源)
不过,这个方法可靠吗?它适用于所有的进程和所有的系统吗?

9 个回答

13

这段内容应该可以在任何POSIX系统上运行(不过,如果你知道/proc文件系统会存在的话,像其他人提到的那样查看它会更简单)。

但是:如果你没有权限去发送信号给某个进程,os.kill可能也会失败。你需要做一些类似下面的操作:

import sys
import os
import errno

try:
    os.kill(int(sys.argv[1]), 0)
except OSError, err:
    if err.errno == errno.ESRCH:
        print "Not running"
    elif err.errno == errno.EPERM:
        print "No permission to signal this process!"
    else:
        print "Unknown error"
else:
    print "Running"
29

在Linux系统中,你可以去目录 /proc/$PID 查看某个进程的信息。实际上,如果这个目录存在,说明这个进程正在运行。

56

马克的回答是最好的选择,毕竟这就是为什么会有 /proc 文件系统。为了让大家更方便复制粘贴,这里有一个更简单的示例:

 >>> import os.path
 >>> os.path.exists("/proc/0")
 False
 >>> os.path.exists("/proc/12")
 True

撰写回答