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 gdbper 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?