Python 3: подпроцесс вызывает зомби

Следуя популярным ответам на этот вопрос и инструкции здесь Я создал код ниже в python 3:

  p1                = subprocess.Popen(["ps", "-e", "-o", "pcpu,args"],           stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  p2                = subprocess.Popen(["cut", "-c", "-132"],   stdin=p1.stdout,  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  p3                = subprocess.Popen(["awk", "NR>2"],         stdin=p2.stdout,  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  p4                = subprocess.Popen(["sort", "-nr"],         stdin=p3.stdout,  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  p5                = subprocess.Popen(["head", "-10"],         stdin=p4.stdout,  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  ps,err            = p5.communicate()
  psout             = str(ps, 'utf-8')

Этот код вызывается каждую минуту или около того в цикле. Вопреки тому, во что меня заставили поверить, это все еще создает зомби. Что я делаю неправильно?

РЕДАКТИРОВАТЬ: зомби при запуске кода:

$ ps -eo pid,ppid,state,cmd | awk '$3 == "Z"'
14441 11232 Z [ps] <defunct>
14442 11232 Z [cut] <defunct>
14445 11232 Z [sort] <defunct>

person Mausy5043    schedule 24.12.2017    source источник
comment
Добавьте также соответствующий вывод ps.   -  person heemayl    schedule 24.12.2017
comment
Эммм... Я на самом деле имел в виду соответствующие процессы-зомби (Z). Здесь ps -eo pid,ppid,state,cmd | awk '$3 == "Z"'   -  person heemayl    schedule 24.12.2017
comment
Ахум. Виноват. Изменено последнее редактирование, чтобы отразить это.   -  person Mausy5043    schedule 24.12.2017


Ответы (1)


Вам нужно использовать communicate() для всех подпроцессов, чтобы избавиться от «несуществующих» процессов.

person Maurice Meyer    schedule 26.12.2017