【问题标题】:What is the best way to see if a python process is already running?查看 python 进程是否已经在运行的最佳方法是什么?
【发布时间】:2015-03-27 14:17:08
【问题描述】:

我正在尝试编写一个脚本来监视我的 python 程序以查看它是否已经在运行。

我首先尝试将此脚本分配给一个对象:

processWatch = os.system("sudo ps afxj | grep quickConversion.py")
if processWatch > 2:  #if more than one is running it won't run.
    while 1:
        "rest of loop"

然后我尝试监视对象的多个实例。

【问题讨论】:

  • 程序是否在Linux上运行?
  • 程序在CentOS上运行
  • 尝试使用psutil,它提供了一个很好的抽象来查看正在运行的进程。
  • @AnttiHaapala 您忘记删除 while 循环和编辑中的 "rest of loop" 中的反引号

标签: python daemon


【解决方案1】:

您可能需要查看psutils 来处理流程。

import psutil

processWatch = [p.cmdline() for p in psutil.process_iter()].count(['python', 'quickConversion.py'])
if processWatch > 0:
    `while 1: `
        `"rest of loop"`

【讨论】:

  • psutil 库是为这些类型的任务而构建的,它是跨平台的。
【解决方案2】:

有一些 Linux 命令可以返回进程列表:

if 'your_process' in commands.getoutput('ps -A'):
    print 'Your process in running.'

【讨论】:

  • 我试图让程序有点“自我意识”,这样如果它看到自己的实例已经在运行,它就不会再次运行。我每分钟都使用 crontabs 运行程序,这样如果失败,它将重新启动。如果程序已经在运行,我该怎么做才能确保它不会运行?
【解决方案3】:

Subprocess 的 Popen 对此非常有用。 https://docs.python.org/3.4/library/subprocess.html

import subprocess

process = subprocess.Popen(cmd)
if process.poll() is None:
    print("The process hasn't terminated yet.")

【讨论】:

  • 我可能是错的,但我认为 OP 不是在谈论 Python 启动的进程(您可以使用子进程)。
  • 我正在尝试将此脚本嵌套在它正在监视的程序中,以便在我运行该程序时它会同时监视自己。 Popen 可以监控正在运行的 python 程序吗?
  • @Dan:您是在运行程序的一个实例还是多个实例?它们是如何推出的?通过 Python 还是独立运行它们?
  • 我正在运行一个实例。我正在使用 crontab 来运行程序,这样如果它失败了,它将重新启动。它们由 crontab 启动。
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2014-01-05
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多