Как правильно обработать и сохранить выключение системы (и SIGTERM), чтобы завершить свою работу в Python?

Основная потребность: У меня есть демон Python, который вызывает другую программу через os.system. Мое желание состоит в том, чтобы иметь возможность правильно обрабатывать завершение работы системы или SIGTERM, чтобы позволить вызываемой программе вернуться, а затем выйти.

Что я уже пробовал: Я пробовал подход, использующий сигнал:

import signal, time

def handler(signum = None, frame = None):
    print 'Signal handler called with signal', signum
    time.sleep(3)
    #here check if process is done
    print 'Wait done'

signal.signal(signal.SIGTERM , handler)

while True:
    time.sleep(6)

Использование time.sleep, похоже, не работает, и вторая печать никогда не вызывается.

Я прочитал несколько слов об atexit.register (обработчике) вместо signal.signal (signal.SIGTERM, обработчик), но при kill ничего не вызывается.

6
задан AsTeR 23 December 2011 в 14:51
поделиться