Почему программа в фоновом режиме умирает после выхода из системы?
У меня есть простая программа на 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
в файл, он должен продолжать работать.