Existe uma maneira de obter um dump principal (ou algo semelhante) para um processo sem realmente matá-lo? Eu tenho um processo python multithread em execução em um sistema incorporado. E eu quero poder obter uma captura instantânea do processo em condições normais (ou seja, com os outros processos necessários para execução), mas não tenho memória suficiente para conectar o gdb (ou executá-lo no gdb) sem o processo python sendo o único em execução.
Espero que essa pergunta faça sentido.
Respostas:
O truque usual é ter algo (possivelmente como um sinal
SIGUSR1
) para acionar o programa efork()
, em seguida, a criança chamaabort()
para fazer o núcleo de despejo.e durante a inicialização
Usado dessa maneira,
fork
não consumirá muita memória extra, pois quase todo o espaço de endereço será compartilhado (e é também por isso que isso funciona para gerar o dump principal).Uma vez, esse truque foi usado com um programa chamado
undump
para gerar um executável a partir de um core dump para salvar uma imagem após uma inicialização complexa;emacs
costumava fazer isso para gerar uma imagem pré-carregadatemacs
.fonte
Você pode tentar usar
gcore
. Isso é uma opção para você?fonte