2012-05-14 74 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的特定實現,如果您想編寫更多與本地程序進行交互的程序,將來會更輕鬆。