프로세스를 종료하지 않고 프로세스 코어 덤프 있습니까? 임베디드 시스템에서

실제로 프로세스를 종료하지 않고 프로세스에 대한 코어 덤프 (또는 유사한 것)를 얻는 방법이 있습니까? 임베디드 시스템에서 멀티 스레드 파이썬 프로세스가 실행 중입니다. 그리고 정상적인 조건에서 프로세스의 스냅 샷을 얻을 수 있기를 원하지만 (예 : 다른 프로세스가 실행되어야 함) 파이썬 프로세스없이 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. 그게 당신을위한 옵션입니까?


답변