실제로 프로세스를 종료하지 않고 프로세스에 대한 코어 덤프 (또는 유사한 것)를 얻는 방법이 있습니까? 임베디드 시스템에서 멀티 스레드 파이썬 프로세스가 실행 중입니다. 그리고 정상적인 조건에서 프로세스의 스냅 샷을 얻을 수 있기를 원하지만 (예 : 다른 프로세스가 실행되어야 함) 파이썬 프로세스없이 gdb를 연결하거나 gdb에서 실행할 메모리가 충분하지 않습니다. 유일하게 달리는 것.
이 질문이 이해되기를 바랍니다.
답변
일반적인 트릭은 무언가를 (아마도 같은 신호 SIGUSR1
) 프로그램을 트리거 fork()
한 다음 자식 abort()
이 스스로 코어를 덤프하도록 호출 하는 것입니다.
from os import fork, abort
(...)
def onUSR1(sig, frame):
if os.fork == 0:
os.abort
초기화하는 동안
from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)
이 방법을 사용하면 fork
거의 모든 주소 공간이 공유되므로 코어 메모리를 많이 생성하기 때문에 추가 메모리를 많이 사용하지 않습니다.
옛날 옛적에이 트릭은 undump
복잡한 초기화 후 이미지를 저장하기 위해 코어 덤프에서 실행 파일을 생성하는 프로그램과 함께 사용되었습니다 . emacs
에서 사전로드 된 이미지를 생성하는 데 사용됩니다 temacs
.
답변
을 사용해보십시오 gcore
. 그게 당신을위한 옵션입니까?