Я использую многопроцессорный модуль Python для порождения нового процесса
следующим образом:
import multiprocessing
import os
d = multiprocessing.Process(target=os.system,args=('iostat 2 > a.txt',))
d.start()
Я хочу получить pid команды iostat или команды, выполняемой с помощью многопроцессорного модуля
Когда я выполняюсь:
d.pid
это дает мне pid подоболочки, в которой работает эта команда.
Любая справка будет ценна.
Заранее спасибо
Я думаю, что с многопроцессорным модулем вам может не повезти, поскольку вы действительно напрямую разветвляете python и получаете этот объект Process вместо интересующего вас процесса в нижней части дерева процессов.
Альтернативный, но, возможно, не оптимальный способ получить этот pid - это использовать модуль psutil для его поиска, используя pid, полученный из вашего объекта Process. Однако Psutil зависит от системы, и его необходимо устанавливать отдельно на каждой из ваших целевых платформ.
Примечание: я сейчас не на машине, на которой обычно работаю, поэтому я не могу предоставить рабочий код или поиграться, чтобы найти лучший вариант, но я отредактирую этот ответ, когда смогу, чтобы показать, как вы могли бы сделать это.
В вашем примере вы можете использовать пакет подпроцесса
. По умолчанию он выполняет команду без оболочки (например, 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
имейте в виду соображения безопасности .