Python 检查守护进程是否正在运行

Python 检查守护进程是否正在运行,python,django,process,daemon,Python,Django,Process,Daemon,我正在运行几个守护进程,我需要维护一个日志来检查每隔15分钟运行一次的所有进程。我试图实现的代码是 def monitor_deamons(): print "starting monitor" demo = ps -ef | grep -v grep | grep daemon #fails print demo PROCESSCOUNT=(ps -ef |grep -v grep |grep -cw <daemon name> #fails prin

我正在运行几个守护进程,我需要维护一个日志来检查每隔15分钟运行一次的所有进程。我试图实现的代码是

def monitor_deamons():
   print "starting monitor"
   demo = ps -ef | grep -v grep | grep daemon #fails
   print demo
   PROCESSCOUNT=(ps -ef |grep -v grep |grep -cw <daemon name> #fails
   print PROCESSCOUNT

我将发布一些成功执行第一个命令的代码,结果存储在
demo
中,您可以从中推断如何获得
进程计数

import subprocess

def monitor_deamons():
   print "starting monitor"

   ps = subprocess.Popen(('ps', '-ef'), stdout=subprocess.PIPE)
   grep = subprocess.Popen(('grep', '-v', 'grep'), stdin=ps.stdout, stdout=subprocess.PIPE)

   ps.stdout.close()  # Allow ps to receive a SIGPIPE if grep exits.

   grep_daemon = subprocess.Popen(('grep', 'daemon'), stdin=grep.stdout)

   grep.stdout.close() # Allow grep to receive a SIGPIPE if grep_daemon exits

   output = grep_daemon.communicate()[0]

   print output

monitor_deamons()

下一次遇到问题时,请解释您尝试和搜索的内容。如果您研究了如何从Python执行进程,您就会发现子进程。从那里,你可以用谷歌搜索Python中如何在进程之间进行管道连接,并得出与我类似的解决方案。

我将发布一些代码,成功执行你的第一个命令,结果存储在
demo
中,从中你可以推断出如何获得
进程计数

import subprocess

def monitor_deamons():
   print "starting monitor"

   ps = subprocess.Popen(('ps', '-ef'), stdout=subprocess.PIPE)
   grep = subprocess.Popen(('grep', '-v', 'grep'), stdin=ps.stdout, stdout=subprocess.PIPE)

   ps.stdout.close()  # Allow ps to receive a SIGPIPE if grep exits.

   grep_daemon = subprocess.Popen(('grep', 'daemon'), stdin=grep.stdout)

   grep.stdout.close() # Allow grep to receive a SIGPIPE if grep_daemon exits

   output = grep_daemon.communicate()[0]

   print output

monitor_deamons()

下一次遇到问题时,请解释您尝试和搜索的内容。如果您研究了如何从Python执行进程,您就会发现子进程。从那以后,您可以在谷歌上搜索Python中如何在进程之间进行管道连接,并找到与我类似的解决方案。

您还可以使用Python中提供的
线程处理模块。如果在同一进程中运行以下命令,这将为您提供有关由daemon_name.py进程创建的守护进程线程的更多信息

获取线程计数:

In [12]: threading.activeCount()
Out[12]: 26
列出所有活动线程:

In [5]: threading.enumerate()
Out[5]: 
[<HistorySavingThread(IPythonHistorySavingThread, started 140361105082112)>,
 <Thread(Thread-17, started daemon 140359321511680)>,
 <Thread(Thread-9, started daemon 140359866775296)>,
 <Thread(Thread-22, started daemon 140359279548160)>,
 <Thread(Thread-5, started daemon 140360376239872)>,
 <Thread(Thread-18, started daemon 140359313118976)>,
 <Thread(Thread-10, started daemon 140359858382592)>,
 <Thread(Thread-20, started daemon 140359296333568)>,
 <Thread(Thread-21, started daemon 140359287940864)>,
 <Thread(Thread-13, started daemon 140359833204480)>,
 <Thread(Thread-16, started daemon 140359329904384)>,
 <_MainThread(MainThread, started 140361348196160)>,
 <Thread(Thread-19, started daemon 140359304726272)>]

我希望这会有所帮助。

您也可以使用python中提供的
线程化模块。如果在同一进程中运行以下命令,这将为您提供有关由daemon_name.py进程创建的守护进程线程的更多信息

获取线程计数:

In [12]: threading.activeCount()
Out[12]: 26
列出所有活动线程:

In [5]: threading.enumerate()
Out[5]: 
[<HistorySavingThread(IPythonHistorySavingThread, started 140361105082112)>,
 <Thread(Thread-17, started daemon 140359321511680)>,
 <Thread(Thread-9, started daemon 140359866775296)>,
 <Thread(Thread-22, started daemon 140359279548160)>,
 <Thread(Thread-5, started daemon 140360376239872)>,
 <Thread(Thread-18, started daemon 140359313118976)>,
 <Thread(Thread-10, started daemon 140359858382592)>,
 <Thread(Thread-20, started daemon 140359296333568)>,
 <Thread(Thread-21, started daemon 140359287940864)>,
 <Thread(Thread-13, started daemon 140359833204480)>,
 <Thread(Thread-16, started daemon 140359329904384)>,
 <_MainThread(MainThread, started 140361348196160)>,
 <Thread(Thread-19, started daemon 140359304726272)>]
我希望这有帮助