Почему программа в фоновом режиме умирает после выхода из системы?

У меня есть простая программа на Python, которая пишет в stderr, как это:

import sys
import time
while 1:
    time.sleep(10)
    sys.stderr.write('.')

Когда я запускаю это в фоновом режиме, а затем выхожу из bash, кажется, что он умирает при первой записи в stderr.

$ python err.py  &
[1] 25546
$ ..logout

huponexit выключен, и я могу подтвердить с другого терминала, что программа работает некоторое время после выхода из системы.

Мой вопрос "почему он просто выходит после записи в stderr?"

1 ответ

Решение

stderr изначально был подключен к терминалу. После выхода из системы ОС аннулирует ваш доступ к этому терминалу (это является частью управления сеансами Unix), и попытка записи в него приводит к SIGHUP сигнал отправляется процессу, и действие по умолчанию - уничтожение процесса.

Если вы перенаправите stderr в файл, он должен продолжать работать.

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