2012-05-14 77 views
1

我必须连续监视一个进程,并使用进程ID来监视进程。我编写了一个程序,在进程停止后发送一封电子邮件,以便我手动重新安排它,但是我经常忘记重新安排进程(基本上是另一个Python程序)。然后,我遇到了apscheduler模块,并使用cron风格计划(http://packages.python.org/APScheduler/cronschedule.html)在进程停止后产生一个进程。现在,一旦进程的PID已被杀死,我就可以产生进程,但是当我使用apscheduler产生它时,我无法获得新调度进程的进程ID(PID)。因此,我无法监控这个过程。 apscheduler中是否有函数来获取预定进程的进程ID?使用python apscheduler调度作业

回答

3

而不是依靠APSchedule来返回PID,为什么不让你的程序报告PID本身。守护进程通常具有pidfiles,它们是位于已知位置的文件,只包含正在运行的进程的pid。只是包装你的主要功能是这样的:

import os 

try: 
    with open("/tmp/myproc.pid") as pidfile: 
     pidfile.write(str(os.getpid())) 
    main() 
finally: 
    os.remove("/tmp/myproc.pid") 

现在,只要你想监控过程中,你可以先检查文件是否存在的PID看,如果确实如此,获取进一步的进程的PID监控。这有利于独立于cron的特定实现,如果您想编写更多与本地程序进行交互的程序,将来会更轻松。