Apakah ada cara untuk mendapatkan dump inti (atau sesuatu yang serupa) untuk suatu proses tanpa benar-benar membunuh proses? Saya memiliki proses python multithreaded yang berjalan pada sistem tertanam. Dan saya ingin bisa mendapatkan snapshot dari proses dalam kondisi normal (yaitu dengan proses lain yang diperlukan untuk menjalankan), tetapi saya tidak memiliki cukup memori untuk menghubungkan gdb (atau menjalankannya di bawah gdb) tanpa proses python menjadi satu-satunya yang berjalan.
Saya harap pertanyaan ini masuk akal.
Jawaban:
Trik yang biasa adalah memiliki sesuatu (mungkin seperti sinyal
SIGUSR1
) untuk memicu programfork()
, kemudian anak tersebut memanggilabort()
untuk membuat sendiri dump core.dan selama inisialisasi
Digunakan dengan cara ini,
fork
tidak akan menghabiskan banyak memori tambahan karena hampir semua ruang alamat akan dibagikan (yang juga mengapa ini bekerja untuk menghasilkan dump inti).Sekali waktu trik ini digunakan dengan program yang dipanggil
undump
untuk menghasilkan executable dari dump inti untuk menyimpan gambar setelah inisialisasi yang kompleks;emacs
digunakan untuk melakukan ini untuk menghasilkan gambar yang dimuat sebelumnyatemacs
.sumber
Anda dapat mencoba menggunakan
gcore
. Apakah itu pilihan untuk Anda?sumber