получение pid дочернего процесса

Я использую многопроцессорный модуль Python для порождения нового процесса

следующим образом:

import multiprocessing
import os
d = multiprocessing.Process(target=os.system,args=('iostat 2 > a.txt',))
d.start()

Я хочу получить pid команды iostat или команды, выполняемой с помощью многопроцессорного модуля

Когда я выполняюсь:

 d.pid 

это дает мне pid подоболочки, в которой работает эта команда.

Любая справка будет ценна.

Заранее спасибо

18
задан Paul Rooney 10 January 2017 в 02:26
поделиться

2 ответа

Я думаю, что с многопроцессорным модулем вам может не повезти, поскольку вы действительно напрямую разветвляете python и получаете этот объект Process вместо интересующего вас процесса в нижней части дерева процессов.

Альтернативный, но, возможно, не оптимальный способ получить этот pid - это использовать модуль psutil для его поиска, используя pid, полученный из вашего объекта Process. Однако Psutil зависит от системы, и его необходимо устанавливать отдельно на каждой из ваших целевых платформ.

Примечание: я сейчас не на машине, на которой обычно работаю, поэтому я не могу предоставить рабочий код или поиграться, чтобы найти лучший вариант, но я отредактирую этот ответ, когда смогу, чтобы показать, как вы могли бы сделать это.

1
ответ дан 30 November 2019 в 07:08
поделиться

В вашем примере вы можете использовать пакет подпроцесса . По умолчанию он выполняет команду без оболочки (например, os.system () ) и предоставляет PID:

from subprocess import Popen
p = Popen('iostat 2 > a.txt', shell=True)
processId = p.pid
p.communicate() # to wait until the end

Popen также обеспечивает возможность подключения к стандартному вводу и выводу процесс.

примечание: перед использованием shell = True имейте в виду соображения безопасности .

1
ответ дан 30 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: