Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2008 12:34:21

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Реализации демона

Зачем плодить одинаковые посты?

Офлайн

#2 Июнь 6, 2008 19:05:34

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

Всем привет. Можно такой вопрос: если демон пораждает дочернего демона, то как корректно, по завершению задачи, выйти из дочернего демона?



Офлайн

#3 Июнь 6, 2008 20:34:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Реализации демона

По завершению дочернего - просто выйти. По sys.exit, например.
По завершению главного - послать сигнал дочерним и подождать из завершения. Через os.wait, например



Офлайн

#4 Июнь 6, 2008 22:35:05

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

Андрей Светлов
По завершению дочернего - просто выйти. По sys.exit, например.
По завершению главного - послать сигнал дочерним и подождать из завершения. Через os.wait, например
Если выхожу через sys.exit, то зомби-процес висит :(



Офлайн

#5 Июнь 7, 2008 00:44:23

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Реализации демона

Если ждать через os.wait (или как там ты его запускаешь - для subprocess немногое меняется) - зомби благополучно помирает



Отредактировано (Июнь 7, 2008 00:46:20)

Офлайн

#6 Июнь 9, 2008 13:22:27

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

Если процесс работает уже как демон и в нем я пытаюсь создать еще один демон следующим образом:
def clientDaemonize (client):
if (os.fork () == 0):
client.send (“test string”)
time.sleep (20)
s = client.recv (1024)
print s
client.close
os._exit (0)
else:
os.wait ()

sockVar = socket (AF_INET, SOCK_STREAM)
sockVar.bind ((“”, tcpPort))
sockVar.listen (tcpConCount)
while 1:
client, addr = sockVar.accept ()
clientDaemonize (client)

Тогда рождается только 1 дочерний демон от первого подключившегося клиента, а все остальные клиенты просто ждут :(



Офлайн

#7 Июнь 9, 2008 13:42:12

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

Все дело в os.wait () - родительский процесс начинает ждать, когда оставновится дочерний.

И возврат в цикл, в котором создаются подключения - не выполняется.



Отредактировано (Июнь 9, 2008 13:42:33)

Офлайн

#8 Июнь 9, 2008 14:39:50

well
От:
Зарегистрирован: 2006-11-20
Сообщения: 163
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

shiza
Все дело в os.wait () - родительский процесс начинает ждать, когда оставновится дочерний.

И возврат в цикл, в котором создаются подключения - не выполняется.
А как тогда организовать “нормальное рождение” дочерних демонов и завершение их? Буду очень благодарен за пример.



Офлайн

#9 Июнь 9, 2008 23:36:52

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализации демона

Всю ветку не осилил прочитать, поэтому отвечаю по сообшениям #26, #28

Клади PID детей в массив, и при завершении работы в цикле делай waitpid для всех детей из этого массива.

Само собой - с детьми надо как-то договорится, что пора завершаться. Если они конечно по сценарию сами не дохнут %)



Отредактировано (Июнь 10, 2008 11:38:25)

Офлайн

#10 Июнь 10, 2008 00:11:24

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Реализации демона


Ужас какой ;)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version