2011-01-01 3 views
5

내 응용 프로그램이 하위 프로세스를 만듭니다. 일반적으로 이러한 프로세스는 문제없이 실행되고 종료됩니다. 그러나 때로는 충돌합니다.프로그램이 하위 프로세스와 충돌했는지 확인하는 방법은 무엇입니까?

현재이 서브 프로세스를 생성하기 위해 파이썬 subprocess module을 사용하고 있습니다. Popen.poll() 메서드를 호출하여 하위 프로세스가 충돌하는지 확인합니다. 불행히도, 내 디버거가 충돌 할 때 활성화되기 때문에 폴링은 예상 된 결과를 반환하지 않습니다.

디버깅 창 (종료하지 않음)을 볼 수 있고 프로세스가 파이썬 코드에서 손상되었는지 감지 할 수 있기를 바랍니다.

이 방법이 있습니까?

답변

2

디버거가 열리면 프로세스가 아직 완료되지 않았으며 subprocess은 프로세스가 실행 중이거나 완료되었는지 알 수 있습니다. 따라서 아니요, subprocess을 통해이를 수행 할 방법이 없습니다.

+0

답변 주셔서 감사합니다. 파이썬으로이 문제를 해결할 다른 방법이 있습니까? –

+0

서브 프로세스에 마스터 프로세스가 모니터링 할 수있는 출력 수단이 있으면 일정한 간격으로 "I 'm alive"표시기를 출력 할 수 있으며 상당히 긴 시간 동안 그러한 표시기가 없으면 하위 프로세스가 중단되었습니다. – Amber

0

항목에 주어진 솔루션을 사용 : 당신의 자식 프로세스에 대한

subprocess.check_output는(),
과정 & 자녀 분석 psutil (그리고 더 많은)
라이브러리를 스레딩 코드를 반환

import psutil 
myprocess = psutil.Process(process_id) # you can find your process id in various ways of your choosing 
for child in myprocess.children(): 
    print("Status of child process is: {0}".format(child.status())) 

당신은 또한 스레딩 라이브러리 t을 사용할 수 원하는 경우, 당신은 충돌을 처리하는 방법을 결정했다면뿐만 아니라 스크립트에서 이러한 아이의 상태를 모니터링 하위 프로세스를 별도의 스레드에로드 한 다음 위의 psutil 분석을 다른 프로세스와 동시에 수행하십시오.

더 많은 정보가 있으면 알려주세요.이 게시물을 찾은 것은 우연이 아닙니다.

관련 문제