Estou procurando uma maneira de obter um coreedump não intrusivo de um processo em execução no Linux.
Eu estou familiarizado com o gdb's gcore
, mas isso só pode ser executado quando gdb
está anexado ao processo e parado para depuração. Para um grande dump de núcleo, isso pode significar muitos segundos, ou até alguns minutos, de execução interrompida.
Existe alguma alternativa sem bloqueio?
Suportes Linux copiar-on-write memória, que se baseia na apoio fork()
sem exec()
. Então, estou pensando em algo no nível do kernel em que o kernel tira um instantâneo de cópia na gravação das tabelas da página do processo que está sendo despejado e, em seguida, grava o núcleo enquanto o processo original continua em execução.
Tenho certeza de que poderia usar gdb
para forçar um fork()
despejo da criança enquanto o pai continua feliz, e depois wait()
o pai colher o filho após o término. É uma bagunça, no entanto, e ainda requer duas interrupções do processo pai, ainda que curtas.
Certamente alguém já precisou disso antes?
Respostas:
O Google CoreDumper vem à mente. Faz uma cópia de cópia na gravação do espaço de endereço do processo, consulte WriteCoreDump () (consulte "Notas").
fonte