Нет SIGTERM перед SIGKILL / shutdown с systemd на Ubuntu 16.04

Я столкнулся с этой проблемой, пока я пытался ответить на вопрос о Stackoverflow.

При выключении Ubuntu 12.04 отправляет SIGTERM всем процессам и ждет не более 10 секунд, прежде чем убить их с помощью SIGKILL (если только они не прекращаются раньше). Мой ответ на SO даже содержит скрипт Python, который проверяет это поведение. Сценарий запускается в терминале, отправляется на задний план и отключается терминалом. При приеме SIGTERM сценарий просто продолжает и непрерывно печатает файл, как долго он запускался после получения SIGTERM.

Ubuntu 16.04 однако скрипт немедленно уничтожается при завершении работы (нет [ f7] записывается в журнал).

Некоторое время я искал googled, но я не мог найти ничего полезного.

Вот сценарий signaltest.py

import signal
import time

stopped = False

out = open('log.txt', 'w')

def stop(sig, frame):
    global stopped
    stopped = True
    out.write('caught SIGTERM\n')
    out.flush()

signal.signal(signal.SIGTERM, stop)

while not stopped:
    out.write('running\n')
    out.flush()
    time.sleep(1)

stop_time = time.time()
while True:
    out.write('%.4fs after stop\n' % (time.time() - stop_time))
    out.flush()
    time.sleep(0.1)

Скрипт использует файл log.txt в текущем каталоге для всех выходных данных. У него есть цикл, который печатает «запуск» каждую секунду. Прием SIGTERM прерывает цикл и запускает другой цикл, который печатает секунды, прошедшие с момента приема SIGTERM.

Сценарий запускается с терминала отсоединенным с помощью disown:

python signaltest.py &
disown

Просто, чтобы быть ясным: это не дубликат ответ на вопрос о Stackoverflow . Речь идет о настольных приложениях, и ответы не подходят.

1
задан 23 May 2017 в 15:39

0 ответов

Другие вопросы по тегам:

Похожие вопросы: