Google CoreDumper vem à mente. Faz uma cópia em cópia do espaço de endereço do processo, consulte WriteCoreDump () ( veja "Notas").
Estou procurando uma maneira de obter um coredump não invasivo de um processo em execução no Linux.
Estou familiarizado com gcore
do gdb, mas isso só pode ser executado quando gdb
está anexado ao processo e é interrompido para depuração. Para um grande despejo principal, isso pode significar muitos segundos, ou mesmo alguns minutos, de execução interrompida.
Existe alguma alternativa sem bloqueio?
O Linux suporta memória copy-on-write, na qual ele depende para suportar fork()
sem exec()
. Então, estou pensando em algo no nível do kernel, no qual o kernel faz um snapshot de copy-on-write das tabelas da página de processo do processo sendo descartado e, em seguida, grava o núcleo enquanto o processo original continua em execução.
Tenho certeza que eu poderia usar gdb
para forçar um fork()
e depois despejar o filho enquanto o pai continua feliz, então wait()
no pai para colher o filho após o término. É confuso, porém, e ainda requer duas interrupções do processo pai, ainda que curtas.
Certamente alguém precisou disso antes?
Google CoreDumper vem à mente. Faz uma cópia em cópia do espaço de endereço do processo, consulte WriteCoreDump () ( veja "Notas").