SIGTERM не попадает в ловушку при выключении - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь обнаружить отключение системы в скрипте Python, где мне нужно изящно остановить поток, он ловит его только тогда, когда я убиваю -15 pid, но когда я делаю shutdown -P или shutdown -r, он не перехватывает сигнал

import time
import threading
import signal


class Job(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.shutdown_flag = threading.Event()

    def run(self):
        while not self.shutdown_flag.is_set():
            time.sleep(0.5)

        f = open('threads.log', 'a')
        f.write('%s Thread #%s stopped\n' % self.ident)
        f.close()


class ServiceExit(Exception):
    pass


def service_shutdown(signum, frame):
    print('Caught signal %d' % signum)
    raise ServiceExit


def main():

    signal.signal(signal.SIGTERM, service_shutdown)
    signal.signal(signal.SIGINT, service_shutdown)

    try:
        j1 = Job()
        j2 = Job()
        j1.start()
        j2.start()

        while True:
            time.sleep(0.5)

    except ServiceExit:
        j1.shutdown_flag.set()
        j2.shutdown_flag.set()
        j1.join()
        j2.join()

    print('Exiting main program')

1 Ответ

0 голосов
/ 11 октября 2019

Дело не в том, что он не захватывает сигнал, а в том, что сигнал не отправляется в это время. Вы должны настроить systemd, чтобы сделать это для вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...