실제로 프로세스를 종료하지 않고 프로세스(또는 이와 유사한 것)의 코어 덤프를 얻을 수 있는 방법이 있습니까? 임베디드 시스템에서 실행되는 다중 스레드 Python 프로세스가 있습니다. 일반적인 상황(예: 실행해야 하는 다른 프로세스)에서 프로세스의 스냅샷을 얻을 수 있기를 원하지만 Python 없이 gdb에 연결(또는 gdb에서 실행)할 메모리가 충분하지 않습니다. 프로세스가 유일하게 실행 중입니다.
이 질문이 의미가 있기를 바랍니다.
답변1
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
답변2
을 사용해 볼 수 있습니다 gcore
. 이것이 당신을 위한 옵션입니까?