2009-07-19 2 views
0

Мне нужно запустить несколько удаленных заданий каждый в определенный момент с помощью потоков и SSH. Поэтому я пишу:Темы, подпроцессы и зомби

def dojob(hostname): 

    command = "echo Done" 
    p = Popen(['ssh','%[email protected]%s' % (user, hostname), command], stdout=PIPE, shell=False) 
    output = p.communicate()[0].strip() 
    print output 

[...] 

fire_starter = [Timer(t, dojob, [y]) for t,y in zip(instant, hosts)] 

for e in fire_starter: 
    e.start() 

Код работает, но он наводняет мою ОС зомби. Честно говоря, я считал, что метод communication() заботится о дочернем процессе, ожидая его завершения. Где я ошибаюсь?

ответ

1

Похоже, вы столкнулись с this issue относительно труб/ssh и popen(). Есть анализ и разрешение here.