새 터미널에서 다른 파이썬 스크립트를 만들고 실행하는 파이썬 프로그램이 있습니다. 그렇게하려면 하위 프로세스를 사용하고 있습니다. 팝업. .pid를 사용하여 새 프로세스의 PID를 가져 오려고합니다. 그러나이 pid 값은 새로 생성 된 프로세스의 실제 PID와 일치하지 않습니다 (두 값이 일치하지 않음).다른 터미널에서 실행 된 파이썬 프로세스의 상태 가져 오기
여기 내 코드의 샘플입니다 : 새롭게 문을 연 터미널에서
from subprocess import Popen
p = Popen("gnome-terminal -e 'python'",shell = True)
print p.pid
, 내가 사용하여 PID를 얻을려고 :
import os
print os.getpid()
을 나는 두 개의 서로 다른 값을 얻고있다. 누구든지 올바른 PID를 얻는 방법을 알고 있습니까? 첫 번째 프로세스에서 작업을 수행하기 위해 두 번째 프로세스가 완료되었을 때이를 알 필요가 있습니다.
도움 주셔서 감사합니다. 당신이 더 많은 정보가 필요한 경우
, 나를 documentation에 따르면 :
그건 사실이야! 내가 한 일은 텍스트 파일에 새 프로세스의 PID를 쓴 다음 이전 프로세스에서 해당 파일을 열어 생성 된 터미널의 상태를 모니터링하는 것입니다. 조금 복잡하지만 적어도 작동합니다. 파이프/소켓을 통해이 작업을 수행하려면 어떻게해야합니까? 더 쉬울까요? –
@Eliekhalifeh : 사용할 것은 사용 사례에 따라 다릅니다. 간단한 텍스트 파일이 작동하는 경우 (예 : 부모 파이썬 스크립트가 해당 pids를 읽을 수 있기 전에 두 개 이상의 파이썬 프로세스가이를 덮어 쓸 때 동시 액세스의 위험이 없음) 사용하십시오. 명명 된 파이프의 코드는 거의 같지만 데이터가 디스크에 쓰여지지 않습니다. 따라서 부모 파이썬 스크립트가 읽은 후 죽으면 pid를 사용할 수 없습니다. 유닉스 소켓은 두 가지 방법으로 통신 할 수 있습니다 (부모 <-> 자식 파이썬 스크립트). tcp/udp 소켓을 사용하면 여러 컴퓨터간에 통신 할 수 있습니다 (예 : 인터넷을 통해). – jfs
@ j-f-sebastian 더 복잡해 보입니다! 부모가 죽으면 작성중인 텍스트 파일이 삭제되므로 디스크에 파일이 보관되지 않습니다.유닉스 소켓을 사용할 수있는 방법을 볼 수있는 링크가 있습니까? 고맙습니다! 그것이 다른 것보다 더 유용하기 때문에 당신의 대답을 받아 들일 것입니다! –