Сохраняйте dict с .pid
s дочерних процессов в качестве ключей, а командные строки перезапускают их как соответствующие значения. i.e.:
childid = []
for cmdline in cmdlines:
p = subprocess.Popen(cmdline.split())
childid[p.pid] = cmdline
os.wait будет возвращаться всякий раз, когда завершается любой дочерний процесс: он дает вам (pid, exitstatus) дочернего процесса. Так что просто перезапустите и сохраните childid
. i.e.:
while mustcontinue:
pid, exitstat = os.wait()
cmdline = childid.pop(pid)
p = subprocess.Popen(cmdline.split())
childid[p.pid] = cmdline
Предположительно, у вас есть несколько критериев, когда этот бесконечный цикл заканчивается, я просто использовал mustcontinue
в качестве названия для этих критериев здесь; -).