2016-11-17 11 views
0

루프에서 프로세스를 실행하고 프로세스가 0을 반환하면 다시 실행해야합니다. 중단되면 스택 추적 (백 트레이스)을 캡처해야합니다. 나는 subprocess.Popen().communicate()을 사용하여 프로세스를 실행하고 있습니다. 지금 .returncode이 134 일 경우, 즉 자녀가 SIGABRT를 (를) 받았을 경우 자녀의 백 트레이스 (스택 추적)를 캡처 할 수있는 방법이 있습니까? 이것은 테스트 도구이므로 개발자 팀에 전달하기 전에 필요한 모든 정보를 캡처해야합니다.Python subprocess.Popen - 중단시 자식 백 트레이스를 캡처하는 방법

+1

보여 코어에서 코드를 역 추적을 가져올 수 있습니다 : P 당신이 당신의 아이를 읽을 그래서 – eyllanesc

+0

기회가 역 추적이 ... stderr로 인쇄된다 프로세스의 표준 오류. –

+0

불행히도 코드는 저작권으로 보호됩니다. 수동으로 실행하면 백 트레이스가 인쇄되지 않습니다. – user2763554

답변

0

감사 사이트와 @Marco의 마지막 코멘트 this에, 나는

0

당신이 할 수있는 일은 하위 프로세스의 stdout과 stderr를 리디렉션하는 것입니다. 파일()을 열고 나중에 확인하십시오.

이렇게하면 백 트레이스를 나중에 "프로세스 종료"로 확인할 수 있어야합니다.

좋은 로깅 메커니즘은 당신에게 그것을 줄 것입니다 :-)이 도움이되기를 바랍니다.

+0

수동으로 실행하면 백 트레이스가 인쇄되지 않습니다. 아래 오류는 중단 될 때 출력됩니다 :'프로그램 수신 신호 SIGABRT, Aborted./lib64/libc.so.6'에서 raise()의 0x00007ffff5d06b55입니다. 내가 원했던 것은 main()에서 바로 역 추적이다. – user2763554

+0

역 추적을 보려면 gdb와 같은 몇 가지 특수 명령을 사용하고 있습니까? 아니면 핵심 파일을 만들 수 있습니까? 불행히도이 전문가는 아니지만 요점은 ... 1) 하위 프로세스가 0을 반환하지 않으면 생성 된 코어 파일을 확인할 수 있습니다. 2) 전에 stderr 및 stdout 파일로 리디렉션 할 수 있습니다 (하지만 난 백 트랙 것보다 그렇게 의심 스러울 것입니다). 3) 더 많은 통찰력을 얻으려면 Linux 시스템의 저널을 확인하십시오. –

+0

@Macro 예, 수동으로 실행하는 동안 gdb를 사용하고 있습니다. 핵심은 알고 있지만 dev 팀은 스택 추적을 선호합니다. 역 추적은 stdout 및 stderr에 기록되지 않습니다. – user2763554