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 gdbestá 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 gdbpara 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?