Saya mencari cara untuk mengambil coredump non-intrusif dari proses yang berjalan di Linux.
Saya kenal dengan gdb gcore
, tapi itu hanya bisa dijalankan ketika gdb
dilampirkan ke proses dan dihentikan untuk debugging. Untuk dump core besar yang mungkin berarti beberapa detik, atau bahkan beberapa menit, eksekusi terputus.
Apakah ada alternatif non-pemblokiran?
Linux mendukung memori copy-on-write, yang diandalkan untuk mendukung fork()
tanpa exec()
. Jadi saya sedang memikirkan sesuatu tingkat kernel di mana kernel mengambil snapshot copy-on-write dari tabel halaman proses dari proses yang dibuang, kemudian menulis inti keluar sementara proses asli terus berjalan.
Saya cukup yakin saya bisa menggunakan gdb
untuk memaksa fork()
kemudian membuang anak sementara orang tua melanjutkan dengan bahagia, kemudian wait()
pada orang tua untuk menuai anak setelah pemutusan hubungan kerja. Itu berantakan, meskipun, dan masih membutuhkan dua gangguan dari proses induk, meskipun yang pendek.
Tentunya seseorang membutuhkan ini sebelumnya?
Jawaban:
Google CoreDumper muncul dalam pikiran. Itu membuat salinan dari ruang alamat proses copy-on-write, lihat WriteCoreDump () (lihat "Catatan").
sumber