У меня есть программа python, которая создаст и выполнит другой скрипт python в новом терминале. Для этого я использую subprocess.Popen. Я пытаюсь получить PID нового процесса, используя .pid. Однако значение этого pid не похоже на реальный pid вновь созданного процесса (эти два значения не совпадают).Получить статус процесса python, который был выполнен в другом терминале
Вот пример моего кода:
from subprocess import Popen
p = Popen("gnome-terminal -e 'python'",shell = True)
print p.pid
В недавно открывшемся терминале, я стараюсь, чтобы получить идентификатор процесса с помощью:
import os
print os.getpid()
Я получаю два разных значения. Кто-нибудь знает, как получить правильный pid? Мне нужно это знать, когда второй процесс был завершен, чтобы выполнить действие в первом процессе.
Благодарим за помощь!
Если вам нужно больше информации, пожалуйста, дайте мне знать :)
Это правда! Я сделал то, что написал pid нового процесса в текстовом файле, а затем открыл этот файл в старом процессе для контроля состояния созданного терминала. Это немного сложно, но, по крайней мере, это работает. Как я могу это сделать через pipe/socket? Это проще? –
@Eliekhalifeh: что использовать зависит от вашего прецедента. Если для вас работает простой текстовый файл (например, нет риска одновременного доступа, когда два или более процесса python перезаписывают его до того, как ваши родительские скрипты python могут прочитать соответствующие pids), затем используйте его. Код для именованного канала выглядит почти так же, но данные не записываются на диск (и поэтому pid не будет доступен, если ваш родительский скрипт python умрет после его чтения). Сокеты Unix позволяют обмениваться обоими способами (родительский <-> сценарии для дочерних питонов). Сокеты tcp/udp позволяют осуществлять связь между различными машинами (например, через Интернет). – jfs
@ j-f-sebastian Кажется сложнее! Текстовый файл, который я создаю, будет удален после того, как родитель умрет, поэтому на диске не будут храниться файлы.У вас есть связь, где я могу видеть, как можно использовать сокеты UNIX? Спасибо! Я приму ваш ответ, потому что он более полезен, чем другой! –