Sto cercando un modo per prendere un coredump non intrusivo di un processo in esecuzione su Linux.
Ho familiarità con gdb gcore
, ma questo può essere eseguito solo quando gdb
è collegato al processo ed è interrotto per il debug. Per un grosso core dump che potrebbe significare molti secondi, o anche pochi minuti, di esecuzione interrotta.
Esiste un'alternativa non bloccante?
Linux supporta la memoria copy-on-write, su cui si basa per supportare fork()
senza exec()
. Quindi sto pensando a qualcosa a livello di kernel in cui il kernel esegue un'istantanea copia-scrittura delle tabelle delle pagine del processo del processo in fase di dump, quindi scrive il core mentre il processo originale continua a funzionare.
Sono abbastanza sicuro che potrei usare gdb
per forzare fork()
quindi a scaricare il bambino mentre il genitore continua felicemente, quindi wait()
nel genitore per raccogliere il bambino dopo la fine. È disordinato, tuttavia, e richiede ancora due interruzioni del processo genitore, anche se brevi.
Sicuramente qualcuno ne aveva bisogno prima?