Извиняюсь перед «Неизвестным» за то, что взял их ответ и исправил его, как будто это был мой собственный ответ, но мои изменения были отклонены.
В утвержденном ответе содержится ошибка, которая может вызвать ошибку.
Вы не можете использовать sys.exit () в обработчике сигналов, но вы можете использовать os._exit, чтобы он стал:
from signal import *
import os, time
def clean(*args):
print "clean me"
os._exit(0)
for sig in (SIGABRT, SIGINT, SIGTERM):
signal(sig, clean)
time.sleep(10)
SIGBREAK может использоваться, если целевой платформой является Windows.
В зависимости от варианта использования и необходимости очистки в случае фатальных ошибок - вы можете добавить SIGSEGV и SIGILL, но обычно это не рекомендуется, поскольку состояние программы может быть таким, что вы создаете бесконечный цикл.