2013-06-26 1 views
0

У меня есть простая программа питона, которая записывает в стандартный вывод, как это ::Почему программа в фоновом режиме умирает после выхода из системы?

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

Когда я запускаю это в фоновом режиме, а затем выйти из Баша, он, кажется, он умирает для первой записи в STDERR.

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

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

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

ответ

1

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

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

+0

Хорошее объяснение. Существует утилита под названием «nohup» (часть GNU coreutils и некоторые оболочки), которая предназначена для случаев, когда вы хотите сохранить программу после выхода из системы. –

+0

Он сказал, что 'huponexit' выключен. Если он уже сделал это, ему не нужно использовать 'nohup', просто перенаправлять вывод от терминала. – Barmar

+0

Спасибо @Barmar за ваше четкое объяснение. Это действительно очистило мою голову. – quiver