Ferroman
Май 21, 2008 12:34:21
Зачем плодить одинаковые посты?
well
Июнь 6, 2008 19:05:34
Всем привет. Можно такой вопрос: если демон пораждает дочернего демона, то как корректно, по завершению задачи, выйти из дочернего демона?
Андрей Светлов
Июнь 6, 2008 20:34:54
По завершению дочернего - просто выйти. По sys.exit, например.
По завершению главного - послать сигнал дочерним и подождать из завершения. Через os.wait, например
well
Июнь 6, 2008 22:35:05
Андрей Светлов
По завершению дочернего - просто выйти. По sys.exit, например.
По завершению главного - послать сигнал дочерним и подождать из завершения. Через os.wait, например
Если выхожу через sys.exit, то зомби-процес висит :(
Андрей Светлов
Июнь 7, 2008 00:44:23
Если ждать через os.wait (или как там ты его запускаешь - для subprocess немногое меняется) - зомби благополучно помирает
well
Июнь 9, 2008 13:22:27
Если процесс работает уже как демон и в нем я пытаюсь создать еще один демон следующим образом:
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 дочерний демон от первого подключившегося клиента, а все остальные клиенты просто ждут :(
shiza
Июнь 9, 2008 13:42:12
Все дело в os.wait () - родительский процесс начинает ждать, когда оставновится дочерний.
И возврат в цикл, в котором создаются подключения - не выполняется.
well
Июнь 9, 2008 14:39:50
shiza
Все дело в os.wait () - родительский процесс начинает ждать, когда оставновится дочерний.
И возврат в цикл, в котором создаются подключения - не выполняется.
А как тогда организовать “нормальное рождение” дочерних демонов и завершение их? Буду очень благодарен за пример.
shiza
Июнь 9, 2008 23:36:52
Всю ветку не осилил прочитать, поэтому отвечаю по сообшениям #26, #28
Клади PID детей в массив, и при завершении работы в цикле делай waitpid для всех детей из этого массива.
Само собой - с детьми надо как-то договорится, что пора завершаться. Если они конечно по сценарию сами не дохнут %)
Ferroman
Июнь 10, 2008 00:11:24
Ужас какой ;)