Я столкнулся с этой проблемой, пока я пытался ответить на вопрос о 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 . Речь идет о настольных приложениях, и ответы не подходят.